【问题标题】:How does Laravel/Lumen verifies the authentication of a user through JWT?Laravel/Lumen 如何通过 JWT 验证用户的身份验证?
【发布时间】:2018-03-03 17:26:20
【问题描述】:

我是 Laravel 和 JWT-auth 的新手。我已经实现了生成 JWT 令牌并在后端获取关联用户的过程,但我仍然无法理解服务器如何仅从存储在客户端的令牌验证用户的身份验证。

如果我在机器 A 上登录并在机器 B 上更改密码,我仍然可以使用以前的令牌从机器 A 登录吗?

【问题讨论】:

  • 。令牌没有链接到密码,而是直接链接到用户,因此 JWT 提供者将自行决定如何处理密码更改。
  • @apokryfos 感谢您的回复。这对我来说很有意义。说 JWT 提供者,你是指 jwt-auth 插件还是后端开发者本人?无论如何,你能给我一些关于实施的良好实践的提示吗?
  • 在这种情况下,JWT 提供程序是您的应用程序,因此您基本上可以在用户更改密码时强制使与用户关联的所有令牌无效(如果您愿意的话(Observers 在这里很有帮助)。
  • @apokryfos 谢谢,伙计。它消除了我的疑虑。

标签: laravel authentication jwt lumen


【解决方案1】:

您有一个“用户”表,通常还有另一个表,例如“会话”。当用户请求通过您的 API 登录时,会在“会话”表中插入新行(保存令牌),并且 API 会将令牌返回给用户。对于所有需要身份验证的请求,用户必须提供此令牌(例如通过 HTTP 标头)。

当您想根据请求对用户进行身份验证时,您必须验证令牌是否存在并保持有效,然后检索用户。流明示例:

$this->app['auth']->viaRequest('api', function ($request) {
    $session = Session::where(['token' => $request->header('token')])->get(); //user gives his token in the header request
    if($session){
        return $session->user(); //you have setup the hasOne/hasMany relationship between sessions and users
        //the user is authenticated
    }
    return null;
    // the user is not authenticated
});

“如果我在机器 A 上登录并在机器 B 上更改密码,我仍然可以使用以前的令牌从机器 A 登录吗?” 如果令牌仍然有效并且您允许多个活动会话,那么可以。令牌未根据密码设置。

【讨论】:

    猜你喜欢
    • 2016-06-25
    • 2017-10-18
    • 2020-03-18
    • 2020-01-05
    • 1970-01-01
    • 2018-05-04
    • 2019-01-07
    • 2017-09-11
    • 1970-01-01
    相关资源
    最近更新 更多