【发布时间】:2020-06-13 22:12:06
【问题描述】:
我正在使用 laravel v5.8、VueJS 和 passport v7.4 进行身份验证。 下面是我的登录功能:
public function login(Request $request)
{
$validator = Validator::make($request->all(), [
'email' => 'required|string|email',
'password' => 'required|string',
]);
if ($validator->fails()) {
return response([
'status' => 0,
'message' => $validator->errors()->first()
]);
}
$credentials = request(['email', 'password']);
if (!Auth::attempt($credentials))
return response()->json([
'status' => 0,
'message' => 'Unauthorized'
], 401);
$user = $request->user();
$tokenResult = $user->createToken('authToken');
$token = $tokenResult->token;
$token->save();
$user_role = Auth::user()->user_type;
$user->assignRole($user_role);
return response()->json([
'status' => 1,
'access_token' => $tokenResult->accessToken,
'token_type' => 'Bearer',
'expires_at' => Carbon::parse(
$tokenResult->token->expires_at
)->toDateTimeString(),
]);
}
我的问题是我的令牌在 10 秒后过期(这是为了测试目的)。因此,如果令牌过期,我会使用 VueJS 中的以下函数检查每条路由:
isValid(token) {
const payload = this.payload(token);
if (payload) {
const datetime = Math.floor(Date.now() / 1000);
return payload.exp >= datetime ? true : false;
}
return false;
}
所以这很好,但我应该怎么做才能刷新令牌? 我们可以制作一个中间件来自己处理吗? 或者是否有任何方法可以检测用户是否正在积极使用应用程序,例如 在基于正常会话的身份验证中?
【问题讨论】:
-
为什么不在
payload.exp末尾附近的setTimeout(refreshToken,refreshTokenInXs)(即1 分钟/到期前的一小部分exp-time)? - 通过即/refresh路由 -
如果当前已过期,您尝试获取新的刷新令牌如何?
-
是的,我知道这个想法,但我担心的是控制器中的令牌验证功能。当我们使用这种身份验证而不是来自护照的“/oauth/token”路由时,我找不到任何功能
-
*令牌刷新功能
-
你为什么要使用自己的登录控制器。 laravel 护照不提供默认登录吗
标签: laravel vue.js laravel-passport