【问题标题】:Tymon\JWTAuth::toUser error: A token is requiredTymon\JWTAuth::toUser 错误:需要令牌
【发布时间】:2018-11-23 10:13:17
【问题描述】:

我有一个使用 Tymon\JWTAuth 对用户进行身份验证的 Larvel API。

一切正常。

由于某些原因,我在web.php 中也有一条非守卫路线:

Route::get('myroute', 'MyController@mymethod');

MyController@mymethod 的代码如下:

$user = JWTAuth::toUser($request->input('token'));

// I tried also this:
// JWTAuth::setToken($request->input('token'));
// $user = JWTAuth::authenticate();

我在浏览器中使用这个 url 调用路由:/myroute?token=eyJ0eXAiOiJKV1QiLCJhbGci....

问题是我在JWT.php中有一个异常:

泰蒙\JWTAuth\异常\JWTException 需要令牌

JWT.php

protected function requireToken()
{
    if (! $this->token) {
        throw new JWTException('A token is required');
    }
}

如何解码作为 URL 参数而不是在请求标头中传递的令牌?

【问题讨论】:

    标签: laravel authentication laravel-5 jwt jwt-auth


    【解决方案1】:

    我用这段代码解决了这个问题:

    use Namshi\JOSE\SimpleJWS;
    
    $secret = config('jwt.secret');
    $jws = SimpleJWS::load($token);
    if (!$jws->isValid($secret)) {
       return response()->json([], 401); // unauthorized
    } 
    $payload = $jws->getPayload();
    

    不过我更愿意直接使用 JWTAuth

    【讨论】:

    • 如何从中获取用户对象?
    【解决方案2】:

    代替

    $user = JWTAuth::toUser($request->input('token'));
    

    使用

    $user = $this->jwt->User();
    

    【讨论】:

      【解决方案3】:

      如果你使用的是 jwt-auth dev,旧版本的 toUser 方法会报错,试试这个:

      // Get the currently authenticated user
      $user = auth()->user();
      

      如果用户未通过身份验证,则返回 null。

      【讨论】:

        猜你喜欢
        • 2018-12-27
        • 2016-08-08
        • 2020-09-10
        • 1970-01-01
        • 2016-05-30
        • 2017-01-29
        • 2018-12-01
        • 1970-01-01
        • 2021-06-01
        相关资源
        最近更新 更多