如何在Laravel 5.2+中修改“记住我”过期时间?

时间:2017-06-21 07:31:50

标签: laravel

使用php artisan make:auth后,Laravel的“记住我”将无限期地记住用户。

如何改变那段时间?就像让它在7天后过期一样?

4 个答案:

答案 0 :(得分:0)

第1步

LoginController中,您会看到use AuthenticatesUsers

我们将protected function sendLoginResponse(Request $request)AuthenticatesUsers复制到LoginController

第2步

我们可以在服务器响应浏览器之前更改cookie的过期时间。我们在sendLoginResponse()的{​​{1}}中添加一些代码。喜欢这个

LoginController

答案 1 :(得分:0)

使用@Hexor有问题,当用户第一次登录时,就无法使用         饼干::得到($ rememberTokenName); 它是空的!

您应首先获取cookie队列值,然后重置cookie过期时间。

$rememberTokenExpireMinutes = 20;

// 首先获取 记住我 这个 Cookie 的名字, 这个名字一般是随机生成的,
$rememberTokenName = \Auth::getRecallerName();

$cookieJar = $this->guard()->getCookieJar();

$cookieValue = $cookieJar->queued($rememberTokenName)->getValue();

$cookieJar->queue($rememberTokenName, $cookieValue, $rememberTokenExpireMinutes);

$jumpUrl = '/user/xxxx';

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

答案 2 :(得分:0)

在laravel 5.8中

class CookiesJar.php

function forever($name, $value, $path = null, $domain = null, $secure = null, $httpOnly = true, $raw = false, $sameSite = null)

return $this->make($name, $value, 2628000, $path, $domain, $secure, $httpOnly, $raw, $sameSite);

将其更改为,this

return $this->make($name, $value, 1440, $path, $domain, $secure, $httpOnly, $raw, $sameSite);

答案 3 :(得分:0)

我知道这个问题很老,但我很难找到 Laravel 7.3 的解决方案,所以我想我应该在这里添加对我有用的内容。

在您的 App\Http\Controllers\Auth\LoginController.php 文件中,进行以下更改

//Add this after namespace declaration
use Illuminate\Http\Request;

//Add this function to the class
protected function sendLoginResponse(Request $request)
    {
        $rememberTokenExpiresAt = 60*24*30; //expires in 30 days
        $rememberTokenCookieKey = $this->guard()->getRecallerName();
        $cookieJar = $this->guard()->getCookieJar();

  /* check if remember me token exists and then override it using the same name and value but different expiration time.
 
If you don't add the if condition, it will throw an error when user doesn't check the remember me box*/
        if ($cookieJar->queued($rememberTokenCookieKey)) {
            $cookieValue = $cookieJar->queued($rememberTokenCookieKey)->getValue();
            $cookieJar->queue($rememberTokenCookieKey, $cookieValue, $rememberTokenExpiresAt);
        }

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

        $this->clearLoginAttempts($request);

        if ($response = $this->authenticated($request, $this->guard()->user())) {
            return $response;
        }

        return $request->wantsJson()
                    ? new JsonResponse([], 204)
                    : redirect()->intended($this->redirectPath());
    }