如何更改 "remember-me" Laravel cookie 的生命周期?

How to change the "remember-me" Laravel cookie lifetime?

我使用 Laravel 5.8 的内置 "Remember me" 功能。我检查了 cookie,发现 remember-me cookie 在大约 5 年内过期。那太长了,我想缩短它。由于 Laravel 自动创建 cookie,我没有手。我该怎么做?

记住我的持续时间可以通过覆盖 AuthenticatesUsers 特征来覆盖。您可以将以下代码添加到 LoginController 以覆盖以下控制器中的特征:

protected function sendLoginResponse(Request $request)
{
    $customRememberMeTimeInMinutes = 10;
    $rememberTokenCookieKey = Auth::getRecallerName();
    Cookie::queue($rememberTokenCookieKey, Cookie::get($rememberTokenCookieKey), $customRememberMeTimeInMinutes);

    $request->session()->regenerate();

    $this->clearLoginAttempts($request);

    return $this->authenticated($request, $this->guard()->user())
            ?: redirect()->intended($this->redirectPath());
}

另一种方法是通过将 users table 中的 remember_token 设置为空值来使记住我会话无效。 示例:

$user = Auth::user();
$user->remember_token = null;
$user->save();

使用 Laravel 8(可能更早),这(在撰写本文时)要容易得多。

只需将密钥 remember 添加到 config/auth.php 文件中的适当守卫即可。在这个例子中,我有一个名为 customGuard

的自定义守卫
'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'customGuard' => [
            'driver' => 'session',
            'provider' => 'users',
            'remember' => "10080" //Number of minutes the "remember me" option works for.
        ],

        'api' => [
            'driver' => 'token',
            'provider' => 'users',
            'hash' => false,
        ],
    ],