使用Laravel 8与Sanctum hasapitokens登录与记住我的选项



所以我用Vue 3、Laravel 8构建了一个SPA,并使用santum(hasapitokens(来处理用户登录,但我找不到令牌有效的会话持续时间,因为我想在用户登录时将其与记住我选项结合使用。这可能吗?或者使用这些令牌是处理用户身份验证的一个糟糕例子吗?

这通常是通过cookie完成的,但在处理圣地身份验证时,这有点棘手。

我想,当登录时使用";记住我";选项但显然,你不能用圣地制作不同到期日的不同代币,所以这里有一个替代方案。


A。具有圣地代币的能力:

当创建用户的令牌时;记住";能力

$user->createToken('auth_token_name', ['remember']);

然后在boot((方法中的App/Providers/AppServiceProvider.php文件中添加

Sanctum::authenticateAccessTokensUsing(function (PersonalAccessToken $token, $isValid) {
if($isValid) return true;
return $token->can('remember') && $token->created_at->gt(now()->subYears(5));
});

通常Laravel";记住cookie";是五年。在这里,您可以自由更改为任何持续时间。


B。将过期列添加到令牌表(TL;DR(

我自己还没有测试过这个,因为这是一个很长的路,但如果你不想破坏代币的能力,应该为你提供一个替代方案。首先,您需要修改santum迁移以包含一个过期列(如这里所示(。然后,您需要覆盖PersonalAccessToken模型(如这里所示(,以便在可填充属性中具有过期列。然后您可以在AppServiceProvider 中添加boot((方法

Sanctum::authenticateAccessTokensUsing(function (PersonalAccessToken $token, $isValid) {
return $isValid ?: $token->expiration->gt(now());
});

唯一的问题是,您需要设置过期日期,因此从数据库中获取新创建的令牌并进行修改,或者覆盖用户模型中的HasApiToken::createToken函数以使用过期参数。

最新更新