joselfonseca / lighthouse-graphql-passport-auth

Add GraphQL mutations to get tokens from passport for https://lighthouse-php.com/
https://lighthouse-php-auth.com/
MIT License
228 stars 56 forks source link

refreshToken has stopped working due to changes in JWT #167

Open SlyDave opened 1 year ago

SlyDave commented 1 year ago

Looks like something has changed somewhere? RefreshToken is crashing out with an error because it's trying to call forUnsecuredSigner() which no longer appears to exist in the JWT package being used.

Found some notes about it in the JWT docs: https://lcobucci-jwt.readthedocs.io/en/stable/upgrading/#removal-of-none-algorithm

Appears to be due to the none-algorithm being removed,

{
    "errors": [
        {
            "message": "Internal server error",
            "locations": [
                {
                    "line": 2,
                    "column": 2
                }
            ],
            "path": [
                "refreshToken"
            ],
            "extensions": {
                "debugMessage": "Call to undefined method Lcobucci\\JWT\\Configuration::forUnsecuredSigner()",
                "file": "C:\\www\\workrest\\vendor\\joselfonseca\\lighthouse-graphql-passport-auth\\src\\GraphQL\\Mutations\\RefreshToken.php",
                "line": 52,
                "trace": [
                    {
                        "file": "C:\\www\\workrest\\vendor\\joselfonseca\\lighthouse-graphql-passport-auth\\src\\GraphQL\\Mutations\\RefreshToken.php",
                        "line": 32,
                        "call": "Joselfonseca\\LighthouseGraphQLPassport\\GraphQL\\Mutations\\RefreshToken::parseToken()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\nuwave\\lighthouse\\src\\Schema\\Values\\FieldValue.php",
                        "line": 185,
                        "call": "Joselfonseca\\LighthouseGraphQLPassport\\GraphQL\\Mutations\\RefreshToken::resolve()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\webonyx\\graphql-php\\src\\Executor\\ReferenceExecutor.php",
                        "line": 714,
                        "call": "Nuwave\\Lighthouse\\Schema\\Values\\FieldValue::Nuwave\\Lighthouse\\Schema\\Values\\{closure}()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\webonyx\\graphql-php\\src\\Executor\\ReferenceExecutor.php",
                        "line": 632,
                        "call": "GraphQL\\Executor\\ReferenceExecutor::resolveFieldValueOrError()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\webonyx\\graphql-php\\src\\Executor\\ReferenceExecutor.php",
                        "line": 541,
                        "call": "GraphQL\\Executor\\ReferenceExecutor::resolveField()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\webonyx\\graphql-php\\src\\Executor\\ReferenceExecutor.php",
                        "line": 949,
                        "call": "GraphQL\\Executor\\ReferenceExecutor::GraphQL\\Executor\\{closure}()"
                    },
                    {
                        "call": "GraphQL\\Executor\\ReferenceExecutor::GraphQL\\Executor\\{closure}()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\webonyx\\graphql-php\\src\\Executor\\ReferenceExecutor.php",
                        "line": 951,
                        "function": "array_reduce()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\webonyx\\graphql-php\\src\\Executor\\ReferenceExecutor.php",
                        "line": 559,
                        "call": "GraphQL\\Executor\\ReferenceExecutor::promiseReduce()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\webonyx\\graphql-php\\src\\Executor\\ReferenceExecutor.php",
                        "line": 297,
                        "call": "GraphQL\\Executor\\ReferenceExecutor::executeFieldsSerially()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\webonyx\\graphql-php\\src\\Executor\\ReferenceExecutor.php",
                        "line": 237,
                        "call": "GraphQL\\Executor\\ReferenceExecutor::executeOperation()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\webonyx\\graphql-php\\src\\Executor\\Executor.php",
                        "line": 159,
                        "call": "GraphQL\\Executor\\ReferenceExecutor::doExecute()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\webonyx\\graphql-php\\src\\GraphQL.php",
                        "line": 163,
                        "call": "GraphQL\\Executor\\Executor::promiseToExecute()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\webonyx\\graphql-php\\src\\GraphQL.php",
                        "line": 97,
                        "call": "GraphQL\\GraphQL::promiseToExecute()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\nuwave\\lighthouse\\src\\GraphQL.php",
                        "line": 126,
                        "call": "GraphQL\\GraphQL::executeQuery()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\nuwave\\lighthouse\\src\\GraphQL.php",
                        "line": 86,
                        "call": "Nuwave\\Lighthouse\\GraphQL::executeParsedQuery()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\nuwave\\lighthouse\\src\\GraphQL.php",
                        "line": 217,
                        "call": "Nuwave\\Lighthouse\\GraphQL::executeQueryString()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\nuwave\\lighthouse\\src\\GraphQL.php",
                        "line": 177,
                        "call": "Nuwave\\Lighthouse\\GraphQL::executeOperation()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\nuwave\\lighthouse\\src\\Support\\Utils.php",
                        "line": 107,
                        "call": "Nuwave\\Lighthouse\\GraphQL::Nuwave\\Lighthouse\\{closure}()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\nuwave\\lighthouse\\src\\GraphQL.php",
                        "line": 177,
                        "call": "Nuwave\\Lighthouse\\Support\\Utils::mapEach()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\nuwave\\lighthouse\\src\\Http\\GraphQLController.php",
                        "line": 32,
                        "call": "Nuwave\\Lighthouse\\GraphQL::executeOperationOrOperations()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\ControllerDispatcher.php",
                        "line": 46,
                        "call": "Nuwave\\Lighthouse\\Http\\GraphQLController::__invoke()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Route.php",
                        "line": 260,
                        "call": "Illuminate\\Routing\\ControllerDispatcher::dispatch()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Route.php",
                        "line": 205,
                        "call": "Illuminate\\Routing\\Route::runController()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Router.php",
                        "line": 799,
                        "call": "Illuminate\\Routing\\Route::run()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
                        "line": 141,
                        "call": "Illuminate\\Routing\\Router::Illuminate\\Routing\\{closure}()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\nuwave\\lighthouse\\src\\Http\\Middleware\\AttemptAuthentication.php",
                        "line": 22,
                        "call": "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
                        "line": 180,
                        "call": "Nuwave\\Lighthouse\\Http\\Middleware\\AttemptAuthentication::handle()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\nuwave\\lighthouse\\src\\Http\\Middleware\\AcceptJson.php",
                        "line": 24,
                        "call": "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
                        "line": 180,
                        "call": "Nuwave\\Lighthouse\\Http\\Middleware\\AcceptJson::handle()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
                        "line": 116,
                        "call": "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Router.php",
                        "line": 800,
                        "call": "Illuminate\\Pipeline\\Pipeline::then()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Router.php",
                        "line": 777,
                        "call": "Illuminate\\Routing\\Router::runRouteWithinStack()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Router.php",
                        "line": 741,
                        "call": "Illuminate\\Routing\\Router::runRoute()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Router.php",
                        "line": 730,
                        "call": "Illuminate\\Routing\\Router::dispatchToRoute()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Kernel.php",
                        "line": 200,
                        "call": "Illuminate\\Routing\\Router::dispatch()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
                        "line": 141,
                        "call": "Illuminate\\Foundation\\Http\\Kernel::Illuminate\\Foundation\\Http\\{closure}()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\livewire\\livewire\\src\\DisableBrowserCache.php",
                        "line": 19,
                        "call": "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
                        "line": 180,
                        "call": "Livewire\\DisableBrowserCache::handle()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\laravel\\nova\\src\\Http\\Middleware\\ServeNova.php",
                        "line": 23,
                        "call": "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
                        "line": 180,
                        "call": "Laravel\\Nova\\Http\\Middleware\\ServeNova::handle()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\barryvdh\\laravel-debugbar\\src\\Middleware\\InjectDebugbar.php",
                        "line": 66,
                        "call": "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
                        "line": 180,
                        "call": "Barryvdh\\Debugbar\\Middleware\\InjectDebugbar::handle()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest.php",
                        "line": 21,
                        "call": "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull.php",
                        "line": 31,
                        "call": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest::handle()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
                        "line": 180,
                        "call": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull::handle()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest.php",
                        "line": 21,
                        "call": "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Middleware\\TrimStrings.php",
                        "line": 40,
                        "call": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest::handle()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
                        "line": 180,
                        "call": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings::handle()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize.php",
                        "line": 27,
                        "call": "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
                        "line": 180,
                        "call": "Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize::handle()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance.php",
                        "line": 86,
                        "call": "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
                        "line": 180,
                        "call": "Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance::handle()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\laravel\\framework\\src\\Illuminate\\Http\\Middleware\\HandleCors.php",
                        "line": 62,
                        "call": "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
                        "line": 180,
                        "call": "Illuminate\\Http\\Middleware\\HandleCors::handle()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\laravel\\framework\\src\\Illuminate\\Http\\Middleware\\TrustProxies.php",
                        "line": 39,
                        "call": "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
                        "line": 180,
                        "call": "Illuminate\\Http\\Middleware\\TrustProxies::handle()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
                        "line": 116,
                        "call": "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Kernel.php",
                        "line": 175,
                        "call": "Illuminate\\Pipeline\\Pipeline::then()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Kernel.php",
                        "line": 144,
                        "call": "Illuminate\\Foundation\\Http\\Kernel::sendRequestThroughRouter()"
                    },
                    {
                        "file": "C:\\www\\workrest\\public\\index.php",
                        "line": 52,
                        "call": "Illuminate\\Foundation\\Http\\Kernel::handle()"
                    },
                    {
                        "file": "C:\\www\\workrest\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\resources\\server.php",
                        "line": 16,
                        "function": "require_once('C:\\www\\workrest\\public\\index.php')"
                    }
                ]
            }
        }
    ]
}
SlyDave commented 1 year ago

passport v11 and oauth2-server v8 both updated to support jtw 5.0 which removed the method being called. lighthouse-graphql-passport-auth has support for passport v11, even though it specifies jtw 4.0 so we've got an old-fashioned dependency break :D

$ composer depends lcobucci/jwt
laravel/passport          v11.8.8    requires  lcobucci/jwt (^4.3|^5.0)                            
league/oauth2-server      8.5.3      requires  lcobucci/jwt (^4.3 || ^5.0)                         
roave/security-advisories dev-master conflicts lcobucci/jwt (>=3.4,<3.4.6|>=4,<4.0.4|>=4.1,<4.1.5)
│  ├──laravel/passport v11.8.8 (requires league/oauth2-server ^8.5.3)
│  │  ├──goseadigital/workrest dev-develop (requires laravel/passport ^v11.8.0)
│  │  └──joselfonseca/lighthouse-graphql-passport-auth 9.0.0 (requires laravel/passport ^9.0 || ^10.0 || ^11.0)
│  │     └──[REDACTED] dev-develop (requires joselfonseca/lighthouse-graphql-passport-auth 9.0.0)
│  ├──league/oauth2-server 8.5.3 (replaces league/oauth2server *)
│  │  └──league/oauth2-server 8.5.3 (replaces league/oauth2server *) (circular dependency aborted here)
│  ├──league/oauth2-server 8.5.3 (replaces lncd/oauth2 *)
│  │  └──league/oauth2-server 8.5.3 (replaces lncd/oauth2 *) (circular dependency aborted here)
│  ├──league/oauth2-server 8.5.3 (replaces league/oauth2server *) (circular dependency aborted here)
│  ├──league/oauth2-server 8.5.3 (replaces lncd/oauth2 *) (circular dependency aborted here)
SlyDave commented 3 months ago

A quick for for this was committed in https://github.com/joselfonseca/lighthouse-graphql-passport-auth/pull/166 - This buys some time. but doesn't resolve the underlying issue