使用php artisan make:auth
后,Laravel的“记住我”将无限期地记住用户。
如何改变那段时间?就像让它在7天后过期一样?
答案 0 :(得分:0)
在LoginController
中,您会看到use AuthenticatesUsers
。
我们将protected function sendLoginResponse(Request $request)
从AuthenticatesUsers
复制到LoginController
。
我们可以在服务器响应浏览器之前更改cookie的过期时间。我们在sendLoginResponse()
的{{1}}中添加一些代码。喜欢这个
LoginController
答案 1 :(得分:0)
您应首先获取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());
}