Hi!
I have laravel 5.4 app as backend APP using tymon/jwt-auth for JWT. App works fine on linux box but on windows I have InvalidClaimException.
Login is sent from angular 2 app via REST api.
Here is the stack trace:
[2017-03-01 16:01:07] local.ERROR: Tymon\JWTAuth\Exceptions\InvalidClaimException: Invalid value provided for claim [exp] in C:\xampp\htdocs\my-app\vendor\tymon\jwt-auth\src\Claims\DatetimeTrait.php:44
Stack trace:
#0 C:\xampp\htdocs\my-app\vendor\tymon\jwt-auth\src\Claims\Claim.php(56): Tymon\JWTAuth\Claims\Expiration->validateCreate(false)
#1 C:\xampp\htdocs\my-app\vendor\tymon\jwt-auth\src\Claims\DatetimeTrait.php(35): Tymon\JWTAuth\Claims\Claim->setValue(false)
#2 C:\xampp\htdocs\my-app\vendor\tymon\jwt-auth\src\Claims\Claim.php(42): Tymon\JWTAuth\Claims\Expiration->setValue(false)
#3 C:\xampp\htdocs\my-app\vendor\tymon\jwt-auth\src\Claims\Factory.php(64): Tymon\JWTAuth\Claims\Claim->__construct(false)
#4 C:\xampp\htdocs\my-app\vendor\tymon\jwt-auth\src\Claims\Factory.php(91): Tymon\JWTAuth\Claims\Factory->get('exp', false)
#5 C:\xampp\htdocs\my-app\vendor\tymon\jwt-auth\src\Factory.php(140): Tymon\JWTAuth\Claims\Factory->make('exp')
#6 C:\xampp\htdocs\my-app\vendor\tymon\jwt-auth\src\Factory.php(166): Tymon\JWTAuth\Factory->buildClaims()
#7 C:\xampp\htdocs\my-app\vendor\tymon\jwt-auth\src\Factory.php(74): Tymon\JWTAuth\Factory->buildClaimsCollection()
#8 C:\xampp\htdocs\my-app\vendor\tymon\jwt-auth\src\JWT.php(217): Tymon\JWTAuth\Factory->make()
#9 C:\xampp\htdocs\my-app\vendor\tymon\jwt-auth\src\JWT.php(61): Tymon\JWTAuth\JWT->makePayload(Object(Dnc\Extensions\DncUser))
#10 C:\xampp\htdocs\my-app\vendor\tymon\jwt-auth\src\JWT.php(75): Tymon\JWTAuth\JWT->fromSubject(Object(Dnc\Extensions\DncUser))
#11 C:\xampp\htdocs\my-app\vendor\tymon\jwt-auth\src\JWTAuth.php(50): Tymon\JWTAuth\JWT->fromUser(Object(Dnc\Extensions\DncUser))
#12 C:\xampp\htdocs\my-app\vendor\laravel\framework\src\Illuminate\Support\Facades\Facade.php(221): Tymon\JWTAuth\JWTAuth->attempt(Array)
#13 C:\xampp\htdocs\my-app\app\Http\Controllers\Api\ApiLoginController.php(16): Illuminate\Support\Facades\Facade::__callStatic('attempt', Array)
#14 [internal function]: Dnc\Http\Controllers\Api\ApiLoginController->login(Object(Dnc\Http\Requests\LoginRequest))
#15 C:\xampp\htdocs\my-app\vendor\laravel\framework\src\Illuminate\Routing\Controller.php(55): call_user_func_array(Array, Array)
#16 C:\xampp\htdocs\my-app\vendor\laravel\framework\src\Illuminate\Routing\ControllerDispatcher.php(44): Illuminate\Routing\Controller->callAction('login', Array)
#17 C:\xampp\htdocs\my-app\vendor\laravel\framework\src\Illuminate\Routing\Route.php(203): Illuminate\Routing\ControllerDispatcher->dispatch(Object(Illuminate\Routing\Route), Object(Dnc\Http\Controllers\Api\ApiLoginController), 'login')
#18 C:\xampp\htdocs\my-app\vendor\laravel\framework\src\Illuminate\Routing\Route.php(160): Illuminate\Routing\Route->runController()
#19 C:\xampp\htdocs\my-app\vendor\laravel\framework\src\Illuminate\Routing\Router.php(559): Illuminate\Routing\Route->run()
#20 C:\xampp\htdocs\my-app\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php(30): Illuminate\Routing\Router->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#21 C:\xampp\htdocs\my-app\vendor\laravel\framework\src\Illuminate\Routing\Middleware\SubstituteBindings.php(41): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#22 C:\xampp\htdocs\my-app\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(148): Illuminate\Routing\Middleware\SubstituteBindings->handle(Object(Illuminate\Http\Request), Object(Closure))
#23 C:\xampp\htdocs\my-app\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#24 C:\xampp\htdocs\my-app\vendor\laravel\framework\src\Illuminate\Routing\Middleware\ThrottleRequests.php(49): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#25 C:\xampp\htdocs\my-app\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(148): Illuminate\Routing\Middleware\ThrottleRequests->handle(Object(Illuminate\Http\Request), Object(Closure), '60', '1')
#26 C:\xampp\htdocs\my-app\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#27 C:\xampp\htdocs\my-app\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(102): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#28 C:\xampp\htdocs\my-app\vendor\laravel\framework\src\Illuminate\Routing\Router.php(561): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#29 C:\xampp\htdocs\my-app\vendor\laravel\framework\src\Illuminate\Routing\Router.php(520): Illuminate\Routing\Router->runRouteWithinStack(Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request))
#30 C:\xampp\htdocs\my-app\vendor\laravel\framework\src\Illuminate\Routing\Router.php(498): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request))
#31 C:\xampp\htdocs\my-app\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php(174): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
#32 C:\xampp\htdocs\my-app\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php(30): Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure}(Object(Illuminate\Http\Request))
#33 C:\xampp\htdocs\my-app\app\Http\Middleware\Cors.php(33): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#34 C:\xampp\htdocs\my-app\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(148): Dnc\Http\Middleware\Cors->handle(Object(Illuminate\Http\Request), Object(Closure))
#35 C:\xampp\htdocs\my-app\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#36 C:\xampp\htdocs\my-app\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\TransformsRequest.php(30): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#37 C:\xampp\htdocs\my-app\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(148): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), Object(Closure))
#38 C:\xampp\htdocs\my-app\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#39 C:\xampp\htdocs\my-app\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\TransformsRequest.php(30): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#40 C:\xampp\htdocs\my-app\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(148): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), Object(Closure))
#41 C:\xampp\htdocs\my-app\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#42 C:\xampp\htdocs\my-app\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\ValidatePostSize.php(27): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#43 C:\xampp\htdocs\my-app\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(148): Illuminate\Foundation\Http\Middleware\ValidatePostSize->handle(Object(Illuminate\Http\Request), Object(Closure))
#44 C:\xampp\htdocs\my-app\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#45 C:\xampp\htdocs\my-app\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode.php(46): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#46 C:\xampp\htdocs\my-app\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(148): Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode->handle(Object(Illuminate\Http\Request), Object(Closure))
#47 C:\xampp\htdocs\my-app\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#48 C:\xampp\htdocs\my-app\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(102): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#49 C:\xampp\htdocs\my-app\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php(149): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#50 C:\xampp\htdocs\my-app\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php(116): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request))
#51 C:\xampp\htdocs\my-app\public\index.php(53): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request))
#52 C:\xampp\htdocs\my-app\server.php(21): require_once('C:\\xampp\\htdocs...')
#53 {main}
Any idea why?
I saw same problem, any ideal?
am using xampp on windows platform and I was faced with the same problem but after a large number of attempts and debugging I found the following:
The value of the [exp] expected to be [ Timestamp in milliseconds ] like that
1541003656000
but my server provide Timestamp in Different format some thing like that
1541003757
I have to modify
public function exp()
{
return Utils::now()->addMinutes($this->ttl)->getTimestamp();
}
In vendor/tymon/jwt-auth/src/Claims/Factory.php
To be
public function exp()
{
return round(microtime(true) * 1000);
}
And Now It Working Successfully
@tymondesigns
@ngodinhngoc the JWT package expecting exp value as Timestamp in milliseconds some thing like 1541003656000
Facing same issue on laravel 6 using version 1.0.0-rc.5. @yehiasalah solution helped.
Is this still relevant? If so, what is blocking it? Is there anything you can do to help move it forward?
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs.
Most helpful comment
am using xampp on windows platform and I was faced with the same problem but after a large number of attempts and debugging I found the following:
The value of the [exp] expected to be [ Timestamp in milliseconds ] like that
but my server provide Timestamp in Different format some thing like that
I have to modify
public function exp() { return Utils::now()->addMinutes($this->ttl)->getTimestamp(); }In vendor/tymon/jwt-auth/src/Claims/Factory.php
To be
public function exp() { return round(microtime(true) * 1000); }And Now It Working Successfully
@tymondesigns