如何在Laravel 5.7中生成JWT刷新令牌

时间:2018-12-27 13:49:36

标签: laravel jwt refresh-token

首先,让我承认我是API的新手,现在我正在使用Laravel开发JWT。我正在使用tymon \ jwt-auth(具体来说是tymon/jwt-auth:dev-develop --prefer-source)。我完成了一些教程,并能够生成JWT访问令牌。

这是我的登录代码:

public function login() {
    $credentials = request(['email', 'password']);
    if (!$token = auth('api')->attempt($credentials)) {
        return response()->json(['error' => 'Unauthorized'], 401);
    }
    return response()->json([
        'status' => 'success',
        'message' => 'Login successful',
        'data' => [
          'access_token' => $token,
        ],
    ]);
}

我还需要获取刷新令牌以及访问令牌,并且找不到适合我的情况的代码。

我尝试在代码中添加以下行:

$refresh_token = JWTAuth::refresh($token);

但邮递员返回此错误:

  

文件中需要令牌   /var/www/brochill-api/vendor/tymon/jwt-auth/src/JWT.php,第331行

如果需要,我还可以提供我使用的其他配置摘要。请帮忙!

1 个答案:

答案 0 :(得分:0)

让我们开始创建一条/refresh路线:

Route::post('refresh', 'AuthController@refresh');

现在,在AuthController中,

<?php

namespace App\Http\Controllers;

use Illuminate\Support\Facades\Auth;
use App\Http\Controllers\Controller;

class AuthController extends Controller
{
    /**
     * Create a new AuthController instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth:api', ['except' => ['login']]);
    }

    /**
     * Get a JWT via given credentials.
     *
     * @return \Illuminate\Http\JsonResponse
     */
    public function login()
    {
        //
    }

    /**
     * Get the authenticated User.
     *
     * @return \Illuminate\Http\JsonResponse
     */
    public function me()
    {
        //
    }

    /**
     * Log the user out (Invalidate the token).
     *
     * @return \Illuminate\Http\JsonResponse
     */
    public function logout()
    {
        //
    }

    /**
     * Refresh a token.
     *
     * @return \Illuminate\Http\JsonResponse
     */
    public function refresh()
    {
        return $this->respondWithToken(auth()->refresh());
    }

    /**
     * Get the token array structure.
     *
     * @param  string $token
     *
     * @return \Illuminate\Http\JsonResponse
     */
    protected function respondWithToken($token)
    {
        return response()->json([
            'access_token' => $token,
            'token_type' => 'bearer',
            'expires_in' => auth()->factory()->getTTL() * 60
        ]);
    }
}

refresh()函数刷新访问令牌并使当前令牌无效。

有关这些的更多信息,您可以查看here上的tymon/jwt-auth官方文档。