Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

"exception":"[object] (PHPOpenSourceSaver\\JWTAuth\\Exceptions\\SecretMissingException(code: 0) #206

Closed
maxdiable opened this issue Feb 3, 2023 · 7 comments
Labels
bug Something isn't working

Comments

@maxdiable
Copy link

Subject of the issue

Describe your issue here.

Your environment:

Q A
Bug? yes
New Feature? no
Framework Laravel
Framework version 9.47.0
Package version 2.0
PHP version 8.0

hi, every now and then when I make a simple request jwt goes wrong and in my laravel log comes this:

[2023-02-03 14:08:39] production.ERROR: An error occurred {"exception":"[object] (PHPOpenSourceSaver\JWTAuth\Exceptions\SecretMissingException(code: 0): An error occurred at C:\xampp\htdocs\msBackEnd\vendor\php-open-source-saver\jwt-auth\src\Providers\JWT\Provider.php:47)
[stacktrace]
#0 C:\xampp\htdocs\msBackEnd\vendor\php-open-source-saver\jwt-auth\src\Providers\JWT\Lcobucci.php(79): PHPOpenSourceSaver\JWTAuth\Providers\JWT\Provider->__construct(NULL, 'HS256', Array)
#1 C:\xampp\htdocs\msBackEnd\vendor\php-open-source-saver\jwt-auth\src\Providers\AbstractServiceProvider.php(170): PHPOpenSourceSaver\JWTAuth\Providers\JWT\Lcobucci->__construct(NULL, 'HS256', Array)
#2 C:\xampp\htdocs\msBackEnd\vendor\laravel\framework\src\Illuminate\Container\Container.php(889): PHPOpenSourceSaver\JWTAuth\Providers\AbstractServiceProvider->PHPOpenSourceSaver\JWTAuth\Providers\{closure}(Object(Illuminate\Foundation\Application), Array)
#3 C:\xampp\htdocs\msBackEnd\vendor\laravel\framework\src\Illuminate\Container\Container.php(774): Illuminate\Container\Container->build(Object(Closure))
#4 C:\xampp\htdocs\msBackEnd\vendor\laravel\framework\src\Illuminate\Foundation\Application.php(860): Illuminate\Container\Container->resolve('tymon.jwt.provi...', Array, true)
#5 C:\xampp\htdocs\msBackEnd\vendor\laravel\framework\src\Illuminate\Container\Container.php(710): Illuminate\Foundation\Application->resolve('tymon.jwt.provi...', Array)
#6 C:\xampp\htdocs\msBackEnd\vendor\laravel\framework\src\Illuminate\Foundation\Application.php(845): Illuminate\Container\Container->make('tymon.jwt.provi...', Array)
#7 C:\xampp\htdocs\msBackEnd\vendor\php-open-source-saver\jwt-auth\src\Providers\AbstractServiceProvider.php(344): Illuminate\Foundation\Application->make('tymon.jwt.provi...')
#8 C:\xampp\htdocs\msBackEnd\vendor\php-open-source-saver\jwt-auth\src\Providers\AbstractServiceProvider.php(142): PHPOpenSourceSaver\JWTAuth\Providers\AbstractServiceProvider->getConfigInstance(Object(Illuminate\Foundation\Application), 'providers.jwt')
#9 C:\xampp\htdocs\msBackEnd\vendor\laravel\framework\src\Illuminate\Container\Container.php(889): PHPOpenSourceSaver\JWTAuth\Providers\AbstractServiceProvider->PHPOpenSourceSaver\JWTAuth\Providers\{closure}(Object(Illuminate\Foundation\Application), Array)
#10 C:\xampp\htdocs\msBackEnd\vendor\laravel\framework\src\Illuminate\Container\Container.php(774): Illuminate\Container\Container->build(Object(Closure))
#11 C:\xampp\htdocs\msBackEnd\vendor\laravel\framework\src\Illuminate\Foundation\Application.php(860): Illuminate\Container\Container->resolve('tymon.jwt.provi...', Array, true)
#12 C:\xampp\htdocs\msBackEnd\vendor\laravel\framework\src\Illuminate\Container\Container.php(710): Illuminate\Foundation\Application->resolve('tymon.jwt.provi...', Array)
#13 C:\xampp\htdocs\msBackEnd\vendor\laravel\framework\src\Illuminate\Foundation\Application.php(845): Illuminate\Container\Container->make('tymon.jwt.provi...', Array)
#14 C:\xampp\htdocs\msBackEnd\vendor\laravel\framework\src\Illuminate\Container\Container.php(1437): Illuminate\Foundation\Application->make('tymon.jwt.provi...')
#15 C:\xampp\htdocs\msBackEnd\vendor\php-open-source-saver\jwt-auth\src\Providers\AbstractServiceProvider.php(203): Illuminate\Container\Container->offsetGet('tymon.jwt.provi...')
#16 C:\xampp\htdocs\msBackEnd\vendor\laravel\framework\src\Illuminate\Container\Container.php(889): PHPOpenSourceSaver\JWTAuth\Providers\AbstractServiceProvider->PHPOpenSourceSaver\JWTAuth\Providers\{closure}(Object(Illuminate\Foundation\Application), Array)
#17 C:\xampp\htdocs\msBackEnd\vendor\laravel\framework\src\Illuminate\Container\Container.php(774): Illuminate\Container\Container->build(Object(Closure))
#18 C:\xampp\htdocs\msBackEnd\vendor\laravel\framework\src\Illuminate\Foundation\Application.php(860): Illuminate\Container\Container->resolve('tymon.jwt.manag...', Array, true)
#19 C:\xampp\htdocs\msBackEnd\vendor\laravel\framework\src\Illuminate\Container\Container.php(710): Illuminate\Foundation\Application->resolve('tymon.jwt.manag...', Array)
#20 C:\xampp\htdocs\msBackEnd\vendor\laravel\framework\src\Illuminate\Foundation\Application.php(845): Illuminate\Container\Container->make('tymon.jwt.manag...', Array)
#21 C:\xampp\htdocs\msBackEnd\vendor\laravel\framework\src\Illuminate\Container\Container.php(1437): Illuminate\Foundation\Application->make('tymon.jwt.manag...')
#22 C:\xampp\htdocs\msBackEnd\vendor\php-open-source-saver\jwt-auth\src\Providers\AbstractServiceProvider.php(245): Illuminate\Container\Container->offsetGet('tymon.jwt.manag...')
#23 C:\xampp\htdocs\msBackEnd\vendor\laravel\framework\src\Illuminate\Container\Container.php(889): PHPOpenSourceSaver\JWTAuth\Providers\AbstractServiceProvider->PHPOpenSourceSaver\JWTAuth\Providers\{closure}(Object(Illuminate\Foundation\Application), Array)
#24 C:\xampp\htdocs\msBackEnd\vendor\laravel\framework\src\Illuminate\Container\Container.php(774): Illuminate\Container\Container->build(Object(Closure))
#25 C:\xampp\htdocs\msBackEnd\vendor\laravel\framework\src\Illuminate\Foundation\Application.php(860): Illuminate\Container\Container->resolve('tymon.jwt', Array, true)
#26 C:\xampp\htdocs\msBackEnd\vendor\laravel\framework\src\Illuminate\Container\Container.php(710): Illuminate\Foundation\Application->resolve('tymon.jwt', Array)
#27 C:\xampp\htdocs\msBackEnd\vendor\laravel\framework\src\Illuminate\Foundation\Application.php(845): Illuminate\Container\Container->make('tymon.jwt', Array)
#28 C:\xampp\htdocs\msBackEnd\vendor\laravel\framework\src\Illuminate\Container\Container.php(1437): Illuminate\Foundation\Application->make('tymon.jwt')
#29 C:\xampp\htdocs\msBackEnd\vendor\php-open-source-saver\jwt-auth\src\Providers\AbstractServiceProvider.php(100): Illuminate\Container\Container->offsetGet('tymon.jwt')
#30 C:\xampp\htdocs\msBackEnd\vendor\laravel\framework\src\Illuminate\Auth\AuthManager.php(113): PHPOpenSourceSaver\JWTAuth\Providers\AbstractServiceProvider->PHPOpenSourceSaver\JWTAuth\Providers\{closure}(Object(Illuminate\Foundation\Application), 'api', Array)
#31 C:\xampp\htdocs\msBackEnd\vendor\laravel\framework\src\Illuminate\Auth\AuthManager.php(90): Illuminate\Auth\AuthManager->callCustomCreator('api', Array)
#32 C:\xampp\htdocs\msBackEnd\vendor\laravel\framework\src\Illuminate\Auth\AuthManager.php(70): Illuminate\Auth\AuthManager->resolve('api')
#33 C:\xampp\htdocs\msBackEnd\vendor\laravel\framework\src\Illuminate\Auth\Middleware\Authenticate.php(63): Illuminate\Auth\AuthManager->guard('api')
#34 C:\xampp\htdocs\msBackEnd\vendor\laravel\framework\src\Illuminate\Auth\Middleware\Authenticate.php(42): Illuminate\Auth\Middleware\Authenticate->authenticate(Object(Illuminate\Http\Request), Array)
#35 C:\xampp\htdocs\msBackEnd\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): Illuminate\Auth\Middleware\Authenticate->handle(Object(Illuminate\Http\Request), Object(Closure), 'api')
#36 C:\xampp\htdocs\msBackEnd\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(116): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#37 C:\xampp\htdocs\msBackEnd\vendor\laravel\framework\src\Illuminate\Routing\Router.php(799): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#38 C:\xampp\htdocs\msBackEnd\vendor\laravel\framework\src\Illuminate\Routing\Router.php(776): Illuminate\Routing\Router->runRouteWithinStack(Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request))
#39 C:\xampp\htdocs\msBackEnd\vendor\laravel\framework\src\Illuminate\Routing\Router.php(740): Illuminate\Routing\Router->runRoute(Object(Illuminate\Http\Request), Object(Illuminate\Routing\Route))
#40 C:\xampp\htdocs\msBackEnd\vendor\laravel\framework\src\Illuminate\Routing\Router.php(729): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request))
#41 C:\xampp\htdocs\msBackEnd\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php(190): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
#42 C:\xampp\htdocs\msBackEnd\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(141): Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure}(Object(Illuminate\Http\Request))
#43 C:\xampp\htdocs\msBackEnd\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#44 C:\xampp\htdocs\msBackEnd\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull.php(31): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), Object(Closure))
#45 C:\xampp\htdocs\msBackEnd\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull->handle(Object(Illuminate\Http\Request), Object(Closure))
#46 C:\xampp\htdocs\msBackEnd\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#47 C:\xampp\htdocs\msBackEnd\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\TrimStrings.php(40): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), Object(Closure))
#48 C:\xampp\htdocs\msBackEnd\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): Illuminate\Foundation\Http\Middleware\TrimStrings->handle(Object(Illuminate\Http\Request), Object(Closure))
#49 C:\xampp\htdocs\msBackEnd\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\ValidatePostSize.php(27): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#50 C:\xampp\htdocs\msBackEnd\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): Illuminate\Foundation\Http\Middleware\ValidatePostSize->handle(Object(Illuminate\Http\Request), Object(Closure))
#51 C:\xampp\htdocs\msBackEnd\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance.php(86): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#52 C:\xampp\htdocs\msBackEnd\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance->handle(Object(Illuminate\Http\Request), Object(Closure))
#53 C:\xampp\htdocs\msBackEnd\vendor\laravel\framework\src\Illuminate\Http\Middleware\HandleCors.php(62): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#54 C:\xampp\htdocs\msBackEnd\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): Illuminate\Http\Middleware\HandleCors->handle(Object(Illuminate\Http\Request), Object(Closure))
#55 C:\xampp\htdocs\msBackEnd\vendor\laravel\framework\src\Illuminate\Http\Middleware\TrustProxies.php(39): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#56 C:\xampp\htdocs\msBackEnd\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): Illuminate\Http\Middleware\TrustProxies->handle(Object(Illuminate\Http\Request), Object(Closure))
#57 C:\xampp\htdocs\msBackEnd\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(116): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#58 C:\xampp\htdocs\msBackEnd\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php(165): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#59 C:\xampp\htdocs\msBackEnd\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php(134): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request))
#60 C:\xampp\htdocs\msBackEnd\public\index.php(52): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request))
#61 {main}
"}

any help ?

br
Max

@maxdiable maxdiable added the bug Something isn't working label Feb 3, 2023
@mfn
Copy link
Contributor

mfn commented Feb 3, 2023

They is probably

SecretMissingException

as thrown in

if (is_null($secret) && (is_null($keys['public']) || is_null($keys['private']))) {
throw new SecretMissingException();
}

You need to check your config, it's missing vital info.

If you say "every now and then", it sounds like something with your setup isn't correct.

@parallels999
Copy link

Use markdown, you linked many unrelated PRs and issues

@Messhias
Copy link
Collaborator

@maxdiable did you manage to solve your issue?

@maxdiable
Copy link
Author

maxdiable commented Feb 17, 2023 via email

@layerok
Copy link

layerok commented Apr 2, 2023

I fixed it by running php artisan config:cache. This command will cache your configuration. This helped me.
I come up to this solution, because I noticed that when I replace the environment variable 'JWT_SECRET' directly with a hardcoded hash inside the jwt config, then everything works as expected.
I guess that sometimes environment variables don't have time to load into the dynamic config. Static(cached) config, of course, doesn't have such problem.

And just in case, make sure that you generated secret key by running php artisan jwt:secret.

@jay-knight
Copy link

jay-knight commented Jul 11, 2024

For me, I had to add a value for JWT_SECRET. We use different keys for different services, so always call

use PHPOpenSourceSaver\JWTAuth\Facades\JWTAuth;

if ($service="service1") {
    JWTAuth::getJWTProvider()->setSecret(config("jwt.service1_secret");
}

But getJWTProvider() will always fail if config("jwt.secret") returns false, even if you never use that key for anything.

Adding

JWT_SECRET="ABC"

to the .env file did the trick.

@specialtactics
Copy link
Member

We can likely make that code a little bit more defensive and default to empty string, but on the other hand this way is probably better, because having a project without a JWT_SECRET set is risky from a security perspective.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

7 participants