laravel - 将 Laravel 8 与 Sanctum hasapitokens 一起使用以使用记住我的选项登录

标签 laravel vue.js laravel-sanctum

因此,我使用 Vue 3、Laravel 8 构建了一个 SPA,并使用 sanctum (hasapitokens) 来处理用户登录,但我找不到 token 有效的 session 持续时间,因为我想将其与用户登录时记住我的选项。这是否可能,或者使用这些 token 是否是处理用户身份验证的不良示例?

最佳答案

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

我想,为什么我不在使用“记住我”选项登录时延长密室 token 的到期日期?但显然你不能用 sanctum 制作具有不同到期日期的不同 token ,所以这里有一个替代方案。


A.使用 Sanctuary token 的能力:

在创建用户 token 时,将“记住”能力添加到能力列表中。

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

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

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

通常 Laravel 的“记住 cookie”的有效期为五年。您可以在此处随意将其更改为任何持续时间。


B.向 token 表添加过期列 (TL;DR)

我还没有亲自测试这个,因为它有很长的路要走,但应该为您提供一个替代方案,以防您不想弄乱 token 的能力。 首先,您需要修改密室迁移以包含过期列 (as in here)。然后您需要覆盖 PersonalAccessToken 模型 ( as in here ) 以在可填充属性中包含过期列。然后就可以在AppServiceProvider中的boot()方法中添加

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

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

关于laravel - 将 Laravel 8 与 Sanctum hasapitokens 一起使用以使用记住我的选项登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68140778/

相关文章:

php - 多语言 Laravel 网站

laravel - ElasticSearch关于博客名称,作者和标签的建议

javascript - 在 html 页面中如何记录用户行为而不存储为图像?

node.js - 使用 vue.js 提高 JEST 测试性能

laravel - 我需要向我的 sainttum api 添加基本身份验证

laravel - 如何在命令行上更改 Laravel 输出颜色?

Laravel 5 - 使用 'old' 预填充表单

插槽内的 Vue.js 方法不起作用

laravel - 如何使用 Laravel Sanctum 限制 SPA Web 应用程序的设备登录

laravel - 即使来自同一(子)域,Chrome 也不允许 Set-Cookie