我正在尝试使用Tymon的JWTAuth在Laravel5.5中实现基于令牌的身份验证。我遵循了该库的GitHub文档,并使用以下身份验证流。以下是我的登录路径的身份验证部分:
try {
// attempt to verify the credentials and create a token for the user
if (!$token = JWTAuth::attempt($credentials)) {
return response()->json(['success' => false, 'error' => 'Invalid Credentials. Please make sure you entered the right information and you have verified your email address.'], 401);
}
}
catch (JWTException $e) {
// something went wrong whilst attempting to encode the token
return response()->json(['success' => false, 'error' => 'could_not_create_token'], 500);
}
// all good so return the token
return response()->json(['success' => true, 'data'=> [ 'token' => $token ]]);
以下是路线:
Route::group([
'middleware' => ['jwt.auth', 'jwt.refresh'],
],
function () {
// Routes requiring authentication
Route::get('/logout', 'Auth\LoginController@logout');
Route::get('/protected', function() {
return 'This is a protected page. You must be logged in to see it.';
});
});
您可以看到我正在使用jwt.auth和jwt.refresh中间件。现在,一切似乎都按预期运行,我可以用令牌验证用户。每个令牌都有一个使用寿命,在每个请求(刷新流)之后,我会获得另一个有效令牌。
但是,我的问题是,如果我有一个尚未使用的用户的有效令牌,然后我将其从标头中删除,并使用有效凭据点击/login路由,我将获得另一个有效令牌。因此,现在我有两个有效的令牌可以用来验证用户,因为我的/login路由不会使以前发布的令牌失效。
是否有人知道一种检查用户是否有未完成的有效令牌的方法,以便在用户从其他地方登录时使其失效?
我将在做一些研究后回答我自己的问题。根据我的理解,JWT令牌是有效的,除非明确列入黑名单。只要服务器认识到它自己创建了令牌,那么它就可以使用密钥破译令牌,并假设它是有效的。这就是为什么代币寿命如此重要。因此,如果您想使已发行的令牌无效,您要么必须等待到期,要么将其列入黑名单。
在测试中,我使用的是mockobject: 我试图验证其方法的使用: 但它抛出以下异常: 组织。莫基托。例外情况。滥用。UnfinishedVerificationException:此处缺少验证(模拟)的方法调用: 这一行的例外点是: setMaxRows接受一个int。 当我注释掉这一行时,测试成功了。调试程序时,我可以看到正在设置的setMaxRows方法: BrandLabels是一个Li
我使用Knock gem(https://github.com/nsarno/Knock)在我的Rails5应用程序中进行基于JWT的身份验证。生成的身份验证令牌在一天后自动过期。有什么方法可以防止令牌自动过期或延长过期? 谢谢
在完成TLS握手之前,我需要使用Go作为客户端对服务器证书进行OCSP吊销检查,即[启动握手->获取服务器证书->检查吊销状态->如果被吊销则中止],而不是[启动握手->完成握手->检查吊销状态]
我在两篇关于堆栈溢出的文章中读到过关于这个问题的文章,但它们没有详细说明。我相信这与在嘲笑中嵌套嘲笑有关(根据我读到的)。然而,我并没有看到或完全理解人们张贴的小片段。 我的测试类如下所示(省略了不必要的代码): 我需要调用的方法:
除了我不想使用Laravel的用户身份验证系统(相反,我使用自己的)之外,我正在构建一个Restful api。 所以我被困在这里: 这给了我以下错误: 类型错误:传递给Illumb\Auth\EloquentUserProvider::validateCredentials()的参数1必须是Illumb\Contracts\Auth\Authenticatable的实例,App\User给定的实
在Effective Java(第二版)的第2项中,作者提到了以下关于在使用构建器时对参数施加不变量的内容: 在将参数从构建器复制到对象后,必须检查它们,并在对象字段而不是构建器字段上检查它们(项目 39)。如果违反任何不变量,则生成方法应引发非法状态异常(项 60)。 这是否意味着构建方法创建目标对象后,应该将其传递给验证例程以进行任何所需的验证? 另外,有人能解释一下这背后的原因吗?