我刚刚用 LARAVEL 和这个https://github.com/tymondesigns/jwt-auth尝试过 JWT 身份验证
但有一点我无法理解。在他们的配置中,他们放置了:
'ttl' => env('JWT_TTL', 60), // in munutes
'refresh_ttl' => env('JWT_REFRESH_TTL', 20160), // in minutes
我所理解的是:令牌的有效期为 1 小时,可以在 2 周内刷新
但是 3 小时后,如果我尝试查询某些内容,它会显示“令牌已过期”。
这个系统是否意味着,用户必须在每小时内更新/刷新他的令牌,但限制为 2 周?我不明白。
用户如何在这种系统上持续登录?第一个小时后刷新令牌如何有用,虽然还不到 2 周,但我无法获得新令牌?
谢谢
更新:代码
配置/jwt.php
'ttl' => 2, // 2 minutes
'refresh_ttl' => 5, // 5 minutes
路线/api.php
Route::post('/login', 'AuthController@login');
Route::get('/test', 'AuthController@test')->middleware('jwt.auth', 'jwt.refresh');
Http/控制器/AuthController
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use JWTAuth;
use Tymon\JWTAuth\Exceptions\JWTException;
class AuthController extends Controller
{
    public function test()
    {
        return response()->json(['coucou' => 1]);
    }
    public function login(Request $request)
    {
        // grab credentials from the request
        $credentials = $request->only('email', 'password');
        try {
            // attempt to verify the credentials and create a token for the user
            if (! $token = JWTAuth::attempt($credentials)) {
                return response()->json(['error' => 'invalid_credentials'], 401);
            }
        } catch (JWTException $e) {
            // something went wrong whilst attempting to encode the token
            return response()->json(['error' => 'could_not_create_token'], 500);
        }
        // all good so return the token
        return response()->json(compact('token'));
    }
}
这是流程:
请求到/登录与{用户名:XXX,密码:XXX} 响应的/登录> {令牌:XXXXXXX}
请求到/测试直后(10秒)与承载XXXXXX 响应的/测试>在HEADER与新令牌良好JSON响应
请求到/测试3分钟(这样3mins 10秒有过去现在,小于的刷新限制在5分钟)后 响应的/测试>令牌过期
我不明白。
访问令牌过期后,您可以使用刷新令牌获取新的访问令牌,而无需要求用户再次输入用户名和密码。只有刷新令牌过期后,用户才需要重新登录。
但 3 小时后,如果我尝试查询某些内容,它会显示“令牌已过期”。
那是因为访问令牌已过期。
该系统是否意味着用户必须在每小时内更新/刷新其令牌,但限制为两周?我不明白。
是的。您将刷新令牌保留在客户端系统中,并在访问令牌过期时使用它来请求新的访问令牌。