【问题标题】:Call to undefined method Laravel\Lumen\Routing\Router::dispatch()调用未定义的方法 Laravel\Lumen\Routing\Router::dispatch()
【发布时间】:2019-07-13 17:20:55
【问题描述】:

有谁知道如何解决这个问题?

我尝试使用这些代码来颁发访问令牌,但我出错了。

protected function oauthLogin(Request $request)
{
    $client = DB::table('oauth_clients')
        ->where('password_client', true)
        ->first();
    $request->request->add([
        "grant_type" => "password",
        "username" => $request->email,
        "password" => $request->password,
        "client_id" => $client->id,
        "client_secret" => $client->secret,
    ]);
    $tokenRequest = $request->create(
        env('APP_URL') . 'api/v1/oauth/token',
        'post'
    );
    $instance = Route::dispatch($tokenRequest);
    return json_decode($instance->getContent());
}

这是错误可追溯日志。我不知道这是否相关,因为我的凭据是正确的,所以我不认为我的凭据被拒绝。我也试过oauth/token,它工作正常。还是同样的错误。我有。

[2019-02-20 13:22:09] local.ERROR: League\OAuth2\Server\Exception\OAuthServerException: The resource owner or authorization server denied the request. in D:\laragon\www\auth-service-optimize\vendor\league\oauth2-server\src\Exception\OAuthServerException.php:215
Stack trace:
#0 D:\laragon\www\auth-service-optimize\vendor\league\oauth2-server\src\AuthorizationValidators\BearerTokenValidator.php(73): League\OAuth2\Server\Exception\OAuthServerException::accessDenied('Access token co...')
#1 D:\laragon\www\auth-service-optimize\vendor\league\oauth2-server\src\ResourceServer.php(84): League\OAuth2\Server\AuthorizationValidators\BearerTokenValidator->validateAuthorization(Object(Zend\Diactoros\ServerRequest))
#2 D:\laragon\www\auth-service-optimize\vendor\laravel\passport\src\Guards\TokenGuard.php(174): League\OAuth2\Server\ResourceServer->validateAuthenticatedRequest(Object(Zend\Diactoros\ServerRequest))
#3 D:\laragon\www\auth-service-optimize\vendor\laravel\passport\src\Guards\TokenGuard.php(126): Laravel\Passport\Guards\TokenGuard->getPsrRequestViaBearerToken(Object(Laravel\Lumen\Http\Request))
#4 D:\laragon\www\auth-service-optimize\vendor\laravel\passport\src\Guards\TokenGuard.php(89): Laravel\Passport\Guards\TokenGuard->authenticateViaBearerToken(Object(Laravel\Lumen\Http\Request))
#5 D:\laragon\www\auth-service-optimize\vendor\laravel\passport\src\PassportServiceProvider.php(274): Laravel\Passport\Guards\TokenGuard->user(Object(Laravel\Lumen\Http\Request))
#6 [internal function]: Laravel\Passport\PassportServiceProvider->Laravel\Passport\{closure}(Object(Laravel\Lumen\Http\Request), NULL)
#7 D:\laragon\www\auth-service-optimize\vendor\illuminate\auth\RequestGuard.php(58): call_user_func(Object(Closure), Object(Laravel\Lumen\Http\Request), NULL)
#8 D:\laragon\www\auth-service-optimize\app\Http\Controllers\AuthController.php(169): Illuminate\Auth\RequestGuard->user()
#9 [internal function]: App\Http\Controllers\AuthController->adminLogin(Object(Laravel\Lumen\Http\Request))
#10 D:\laragon\www\auth-service-optimize\vendor\illuminate\container\BoundMethod.php(29): call_user_func_array(Array, Array)
#11 D:\laragon\www\auth-service-optimize\vendor\illuminate\container\BoundMethod.php(87): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
#12 D:\laragon\www\auth-service-optimize\vendor\illuminate\container\BoundMethod.php(31): Illuminate\Container\BoundMethod::callBoundMethod(Object(Laravel\Lumen\Application), Array, Object(Closure))
#13 D:\laragon\www\auth-service-optimize\vendor\illuminate\container\Container.php(572): Illuminate\Container\BoundMethod::call(Object(Laravel\Lumen\Application), Array, Array, NULL)
#14 D:\laragon\www\auth-service-optimize\vendor\laravel\lumen-framework\src\Concerns\RoutesRequests.php(378): Illuminate\Container\Container->call(Array, Array)
#15 D:\laragon\www\auth-service-optimize\vendor\laravel\lumen-framework\src\Concerns\RoutesRequests.php(344): Laravel\Lumen\Application->callControllerCallable(Array, Array)
#16 D:\laragon\www\auth-service-optimize\vendor\laravel\lumen-framework\src\Concerns\RoutesRequests.php(318): Laravel\Lumen\Application->callLumenController(Object(App\Http\Controllers\AuthController), 'adminLogin', Array)
#17 D:\laragon\www\auth-service-optimize\vendor\laravel\lumen-framework\src\Concerns\RoutesRequests.php(280): Laravel\Lumen\Application->callControllerAction(Array)
#18 D:\laragon\www\auth-service-optimize\vendor\laravel\lumen-framework\src\Concerns\RoutesRequests.php(265): Laravel\Lumen\Application->callActionOnArrayBasedRoute(Array)
#19 D:\laragon\www\auth-service-optimize\vendor\laravel\lumen-framework\src\Concerns\RoutesRequests.php(165): Laravel\Lumen\Application->handleFoundRoute(Array)
#20 D:\laragon\www\auth-service-optimize\vendor\laravel\lumen-framework\src\Concerns\RoutesRequests.php(418): Laravel\Lumen\Application->Laravel\Lumen\Concerns\{closure}(Object(Laravel\Lumen\Http\Request))
#21 D:\laragon\www\auth-service-optimize\vendor\laravel\lumen-framework\src\Concerns\RoutesRequests.php(171): Laravel\Lumen\Application->sendThroughPipeline(Array, Object(Closure))
#22 D:\laragon\www\auth-service-optimize\vendor\laravel\lumen-framework\src\Concerns\RoutesRequests.php(108): Laravel\Lumen\Application->dispatch(NULL)
#23 D:\laragon\www\auth-service-optimize\public\index.php(28): Laravel\Lumen\Application->run()
#24 {main} {"exception":"[object] (League\\OAuth2\\Server\\Exception\\OAuthServerException(code: 9): The resource owner or authorization server denied the request. at D:\\laragon\\www\\auth-service-optimize\\vendor\\league\\oauth2-server\\src\\Exception\\OAuthServerException.php:215)
[stacktrace]
#0 D:\\laragon\\www\\auth-service-optimize\\vendor\\league\\oauth2-server\\src\\AuthorizationValidators\\BearerTokenValidator.php(73): League\\OAuth2\\Server\\Exception\\OAuthServerException::accessDenied('Access token co...')
#1 D:\\laragon\\www\\auth-service-optimize\\vendor\\league\\oauth2-server\\src\\ResourceServer.php(84): League\\OAuth2\\Server\\AuthorizationValidators\\BearerTokenValidator->validateAuthorization(Object(Zend\\Diactoros\\ServerRequest))
#2 D:\\laragon\\www\\auth-service-optimize\\vendor\\laravel\\passport\\src\\Guards\\TokenGuard.php(174): League\\OAuth2\\Server\\ResourceServer->validateAuthenticatedRequest(Object(Zend\\Diactoros\\ServerRequest))
#3 D:\\laragon\\www\\auth-service-optimize\\vendor\\laravel\\passport\\src\\Guards\\TokenGuard.php(126): Laravel\\Passport\\Guards\\TokenGuard->getPsrRequestViaBearerToken(Object(Laravel\\Lumen\\Http\\Request))
#4 D:\\laragon\\www\\auth-service-optimize\\vendor\\laravel\\passport\\src\\Guards\\TokenGuard.php(89): Laravel\\Passport\\Guards\\TokenGuard->authenticateViaBearerToken(Object(Laravel\\Lumen\\Http\\Request))
#5 D:\\laragon\\www\\auth-service-optimize\\vendor\\laravel\\passport\\src\\PassportServiceProvider.php(274): Laravel\\Passport\\Guards\\TokenGuard->user(Object(Laravel\\Lumen\\Http\\Request))
#6 [internal function]: Laravel\\Passport\\PassportServiceProvider->Laravel\\Passport\\{closure}(Object(Laravel\\Lumen\\Http\\Request), NULL)
#7 D:\\laragon\\www\\auth-service-optimize\\vendor\\illuminate\\auth\\RequestGuard.php(58): call_user_func(Object(Closure), Object(Laravel\\Lumen\\Http\\Request), NULL)
#8 D:\\laragon\\www\\auth-service-optimize\\app\\Http\\Controllers\\AuthController.php(169): Illuminate\\Auth\\RequestGuard->user()
#9 [internal function]: App\\Http\\Controllers\\AuthController->adminLogin(Object(Laravel\\Lumen\\Http\\Request))
#10 D:\\laragon\\www\\auth-service-optimize\\vendor\\illuminate\\container\\BoundMethod.php(29): call_user_func_array(Array, Array)
#11 D:\\laragon\\www\\auth-service-optimize\\vendor\\illuminate\\container\\BoundMethod.php(87): Illuminate\\Container\\BoundMethod::Illuminate\\Container\\{closure}()
#12 D:\\laragon\\www\\auth-service-optimize\\vendor\\illuminate\\container\\BoundMethod.php(31): Illuminate\\Container\\BoundMethod::callBoundMethod(Object(Laravel\\Lumen\\Application), Array, Object(Closure))
#13 D:\\laragon\\www\\auth-service-optimize\\vendor\\illuminate\\container\\Container.php(572): Illuminate\\Container\\BoundMethod::call(Object(Laravel\\Lumen\\Application), Array, Array, NULL)
#14 D:\\laragon\\www\\auth-service-optimize\\vendor\\laravel\\lumen-framework\\src\\Concerns\\RoutesRequests.php(378): Illuminate\\Container\\Container->call(Array, Array)
#15 D:\\laragon\\www\\auth-service-optimize\\vendor\\laravel\\lumen-framework\\src\\Concerns\\RoutesRequests.php(344): Laravel\\Lumen\\Application->callControllerCallable(Array, Array)
#16 D:\\laragon\\www\\auth-service-optimize\\vendor\\laravel\\lumen-framework\\src\\Concerns\\RoutesRequests.php(318): Laravel\\Lumen\\Application->callLumenController(Object(App\\Http\\Controllers\\AuthController), 'adminLogin', Array)
#17 D:\\laragon\\www\\auth-service-optimize\\vendor\\laravel\\lumen-framework\\src\\Concerns\\RoutesRequests.php(280): Laravel\\Lumen\\Application->callControllerAction(Array)
#18 D:\\laragon\\www\\auth-service-optimize\\vendor\\laravel\\lumen-framework\\src\\Concerns\\RoutesRequests.php(265): Laravel\\Lumen\\Application->callActionOnArrayBasedRoute(Array)
#19 D:\\laragon\\www\\auth-service-optimize\\vendor\\laravel\\lumen-framework\\src\\Concerns\\RoutesRequests.php(165): Laravel\\Lumen\\Application->handleFoundRoute(Array)
#20 D:\\laragon\\www\\auth-service-optimize\\vendor\\laravel\\lumen-framework\\src\\Concerns\\RoutesRequests.php(418): Laravel\\Lumen\\Application->Laravel\\Lumen\\Concerns\\{closure}(Object(Laravel\\Lumen\\Http\\Request))
#21 D:\\laragon\\www\\auth-service-optimize\\vendor\\laravel\\lumen-framework\\src\\Concerns\\RoutesRequests.php(171): Laravel\\Lumen\\Application->sendThroughPipeline(Array, Object(Closure))
#22 D:\\laragon\\www\\auth-service-optimize\\vendor\\laravel\\lumen-framework\\src\\Concerns\\RoutesRequests.php(108): Laravel\\Lumen\\Application->dispatch(NULL)
#23 D:\\laragon\\www\\auth-service-optimize\\public\\index.php(28): Laravel\\Lumen\\Application->run()
#24 {main}
"} 
[2019-02-20 13:22:09] local.ERROR: Symfony\Component\Debug\Exception\FatalThrowableError: Call to undefined method Laravel\Lumen\Routing\Router::dispatch() in D:\laragon\www\auth-service-optimize\vendor\illuminate\support\Facades\Facade.php:237
Stack trace:
#0 D:\laragon\www\auth-service-optimize\app\Http\Controllers\AuthController.php(202): Illuminate\Support\Facades\Facade::__callStatic('dispatch', Array)
#1 D:\laragon\www\auth-service-optimize\app\Http\Controllers\AuthController.php(171): App\Http\Controllers\AuthController->oauthLogin(Object(Laravel\Lumen\Http\Request))
#2 [internal function]: App\Http\Controllers\AuthController->adminLogin(Object(Laravel\Lumen\Http\Request))
#3 D:\laragon\www\auth-service-optimize\vendor\illuminate\container\BoundMethod.php(29): call_user_func_array(Array, Array)
#4 D:\laragon\www\auth-service-optimize\vendor\illuminate\container\BoundMethod.php(87): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
#5 D:\laragon\www\auth-service-optimize\vendor\illuminate\container\BoundMethod.php(31): Illuminate\Container\BoundMethod::callBoundMethod(Object(Laravel\Lumen\Application), Array, Object(Closure))
#6 D:\laragon\www\auth-service-optimize\vendor\illuminate\container\Container.php(572): Illuminate\Container\BoundMethod::call(Object(Laravel\Lumen\Application), Array, Array, NULL)
#7 D:\laragon\www\auth-service-optimize\vendor\laravel\lumen-framework\src\Concerns\RoutesRequests.php(378): Illuminate\Container\Container->call(Array, Array)
#8 D:\laragon\www\auth-service-optimize\vendor\laravel\lumen-framework\src\Concerns\RoutesRequests.php(344): Laravel\Lumen\Application->callControllerCallable(Array, Array)
#9 D:\laragon\www\auth-service-optimize\vendor\laravel\lumen-framework\src\Concerns\RoutesRequests.php(318): Laravel\Lumen\Application->callLumenController(Object(App\Http\Controllers\AuthController), 'adminLogin', Array)
#10 D:\laragon\www\auth-service-optimize\vendor\laravel\lumen-framework\src\Concerns\RoutesRequests.php(280): Laravel\Lumen\Application->callControllerAction(Array)
#11 D:\laragon\www\auth-service-optimize\vendor\laravel\lumen-framework\src\Concerns\RoutesRequests.php(265): Laravel\Lumen\Application->callActionOnArrayBasedRoute(Array)
#12 D:\laragon\www\auth-service-optimize\vendor\laravel\lumen-framework\src\Concerns\RoutesRequests.php(165): Laravel\Lumen\Application->handleFoundRoute(Array)
#13 D:\laragon\www\auth-service-optimize\vendor\laravel\lumen-framework\src\Concerns\RoutesRequests.php(418): Laravel\Lumen\Application->Laravel\Lumen\Concerns\{closure}(Object(Laravel\Lumen\Http\Request))
#14 D:\laragon\www\auth-service-optimize\vendor\laravel\lumen-framework\src\Concerns\RoutesRequests.php(171): Laravel\Lumen\Application->sendThroughPipeline(Array, Object(Closure))
#15 D:\laragon\www\auth-service-optimize\vendor\laravel\lumen-framework\src\Concerns\RoutesRequests.php(108): Laravel\Lumen\Application->dispatch(NULL)
#16 D:\laragon\www\auth-service-optimize\public\index.php(28): Laravel\Lumen\Application->run()
#17 {main} {"exception":"[object] (Symfony\\Component\\Debug\\Exception\\FatalThrowableError(code: 0): Call to undefined method Laravel\\Lumen\\Routing\\Router::dispatch() at D:\\laragon\\www\\auth-service-optimize\\vendor\\illuminate\\support\\Facades\\Facade.php:237)
[stacktrace]
#0 D:\\laragon\\www\\auth-service-optimize\\app\\Http\\Controllers\\AuthController.php(202): Illuminate\\Support\\Facades\\Facade::__callStatic('dispatch', Array)
#1 D:\\laragon\\www\\auth-service-optimize\\app\\Http\\Controllers\\AuthController.php(171): App\\Http\\Controllers\\AuthController->oauthLogin(Object(Laravel\\Lumen\\Http\\Request))
#2 [internal function]: App\\Http\\Controllers\\AuthController->adminLogin(Object(Laravel\\Lumen\\Http\\Request))
#3 D:\\laragon\\www\\auth-service-optimize\\vendor\\illuminate\\container\\BoundMethod.php(29): call_user_func_array(Array, Array)
#4 D:\\laragon\\www\\auth-service-optimize\\vendor\\illuminate\\container\\BoundMethod.php(87): Illuminate\\Container\\BoundMethod::Illuminate\\Container\\{closure}()
#5 D:\\laragon\\www\\auth-service-optimize\\vendor\\illuminate\\container\\BoundMethod.php(31): Illuminate\\Container\\BoundMethod::callBoundMethod(Object(Laravel\\Lumen\\Application), Array, Object(Closure))
#6 D:\\laragon\\www\\auth-service-optimize\\vendor\\illuminate\\container\\Container.php(572): Illuminate\\Container\\BoundMethod::call(Object(Laravel\\Lumen\\Application), Array, Array, NULL)
#7 D:\\laragon\\www\\auth-service-optimize\\vendor\\laravel\\lumen-framework\\src\\Concerns\\RoutesRequests.php(378): Illuminate\\Container\\Container->call(Array, Array)
#8 D:\\laragon\\www\\auth-service-optimize\\vendor\\laravel\\lumen-framework\\src\\Concerns\\RoutesRequests.php(344): Laravel\\Lumen\\Application->callControllerCallable(Array, Array)
#9 D:\\laragon\\www\\auth-service-optimize\\vendor\\laravel\\lumen-framework\\src\\Concerns\\RoutesRequests.php(318): Laravel\\Lumen\\Application->callLumenController(Object(App\\Http\\Controllers\\AuthController), 'adminLogin', Array)
#10 D:\\laragon\\www\\auth-service-optimize\\vendor\\laravel\\lumen-framework\\src\\Concerns\\RoutesRequests.php(280): Laravel\\Lumen\\Application->callControllerAction(Array)
#11 D:\\laragon\\www\\auth-service-optimize\\vendor\\laravel\\lumen-framework\\src\\Concerns\\RoutesRequests.php(265): Laravel\\Lumen\\Application->callActionOnArrayBasedRoute(Array)
#12 D:\\laragon\\www\\auth-service-optimize\\vendor\\laravel\\lumen-framework\\src\\Concerns\\RoutesRequests.php(165): Laravel\\Lumen\\Application->handleFoundRoute(Array)
#13 D:\\laragon\\www\\auth-service-optimize\\vendor\\laravel\\lumen-framework\\src\\Concerns\\RoutesRequests.php(418): Laravel\\Lumen\\Application->Laravel\\Lumen\\Concerns\\{closure}(Object(Laravel\\Lumen\\Http\\Request))
#14 D:\\laragon\\www\\auth-service-optimize\\vendor\\laravel\\lumen-framework\\src\\Concerns\\RoutesRequests.php(171): Laravel\\Lumen\\Application->sendThroughPipeline(Array, Object(Closure))
#15 D:\\laragon\\www\\auth-service-optimize\\vendor\\laravel\\lumen-framework\\src\\Concerns\\RoutesRequests.php(108): Laravel\\Lumen\\Application->dispatch(NULL)
#16 D:\\laragon\\www\\auth-service-optimize\\public\\index.php(28): Laravel\\Lumen\\Application->run()
#17 {main}
"} 

【问题讨论】:

  • 请在您的错误日志中分享错误的回溯
  • @OluwafemiSule 是的,我现在分享了它

标签: oauth-2.0 lumen laravel-passport


【解决方案1】:

分派的请求没有在前一行中添加凭据。

原因是Request::create 返回了一个新的请求实例。

在$request新创建的$request上添加请求参数,然后dispatch。

$tokenRequest = $request->create(
    env('APP_URL') . 'api/v1/oauth/token',
    'POST'
);

$tokenRequest->request->add([
    "grant_type" => "password",
    "username" => $request->email,
    "password" => $request->password,
    "client_id" => $client->id,
    "client_secret" => $client->secret,
]);

$response = app()->handle($tokenRequest);

【讨论】:

  • 好主意,但仍然无法正常工作。所以我尝试了不同问题的另一个答案。这是修改$instance = App::dispatch($tokenRequest);行的附加代码。它起作用了:D stackoverflow.com/questions/43038479/… 请编辑你的答案添加类似的调度,这样我就可以标记为正确答案:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-25
  • 2018-03-03
  • 2023-03-23
  • 2017-06-11
  • 1970-01-01
  • 2023-04-01
  • 2020-09-29
相关资源
最近更新 更多