内部请求需要 Laravel Dingo 身份验证 JWT

Posted

技术标签:

【中文标题】内部请求需要 Laravel Dingo 身份验证 JWT【英文标题】:Laravel Dingo Authentication JWT Required on Internal Requests 【发布时间】:2017-05-17 23:52:56 【问题描述】:

我正在使用 Laravel Dingo 在 Laravel 控制器中(内部)使用 API 请求,并且遇到了使用标头中的令牌进行身份验证的路由问题。我抛出异常,在请求中寻找令牌。

这是我的 API 路由:

$api = app('Dingo\Api\Routing\Router');

$api->version(['v1'], function ($api) 
 $api->post('/users/addEmployee', "App\Http\Controllers\Api\UserController@storeEmployee")->middleware('jwt.auth');

注意添加到调用中的中间件。使用 Postman 时,这可以 100% 工作并添加新员工。

当使用 Dingo 在内部调用它时,我会返回典型的“找不到令牌”错误,当授权标头丢失时,我通常会从 API 中看到该错误。

try
            $dispatcher = app('Dingo\Api\Dispatcher');

            $payload = [
                        'name' => $request->name,
                        'email' => $request->email,
                       ];


            $registerResponse = $dispatcher->be(Auth::user())->with($payload)->post('/api/users/addEmployee');

      catch( InternalHttpException $internal )
        echo($internal->getResponse());die();
        return Redirect::back()->withInput()->withErrors($v->getErrors());
      

我的问题是,我需要添加令牌,还是有办法为内部请求“关闭”jwt 中间件? ->be 方法不能在 Dingo 中处理所有这些吗? p.s. Auth::user 不为空,我已经检查过了。

【问题讨论】:

【参考方案1】:

解决了,您可以在出站请求被分派之前手动设置标头。在文档中的任何地方都没有看到该方法,但可以使用以下方法。

  $token = JWTAuth::fromUser(Auth::user());
  $registerResponse = $this->api->header('Authorization','Bearer:'.$token)->with($payload)->be(Auth::user())->post('/api/users/addEmployee');

【讨论】:

以上是关于内部请求需要 Laravel Dingo 身份验证 JWT的主要内容,如果未能解决你的问题,请参考以下文章

jwt api 身份验证如何工作(使用 dingo-laravel)

使用内置的 Laravel 5.2 身份验证并加载 SPA,然后为所有其他路由加载 Dingo API

没有用户模型的 Laravel JWT 身份验证

laravel dingo/api添加jwt-auth认证

Laravel 4.1 身份验证会话数据不会跨请求持久化

Laravel - 使用会话令牌进行身份验证