修改 Laravel 的登录时『记住我』的过期时间 转

转自:https://learnku.com/laravel/t/40736

简介:
众所周知, Laravel 框架是最受欢迎的几个 PHP 框架之一(2019 最受欢迎的 PHP 框架) . 在您的项目中,您可能正在使用 Laravel 框架自带的用户认证 “php artisan make: auth” 来处理用于身份验证相关的操作,现在您想要根据项目手动定制「记住我」token 的过期时间。要解决这个问题,我们可以通过以下过程来轻松修改 Laravel 中的「记住我」token 到期时间默认值

Laravel 中「记住我」token 的过期时间默认值:
在了解自定义「记住我」token 的过期时间之前,让我们查看「记住我」token 的默认过期时间.

如图片所显示的,Laravel 中「记住我」token 默认的过期时间为五年,显然这个值非常的大,因此您在实际项目中根据项目的业务需求对其进行自定义是有必要的,我们将在本文中学习了解如何做到这一点.

修改「记住我」token 过期时间的步骤:
让我们假设,您要将「记住我」token 的过期时间设置为 10 分钟。以下是您需要执行的步骤.

[自定义 token 的过期时间] 第一步:
查看目录 app/Http/Controllers/Auth/ 并打开 LoginController.php , 您将看到以下内容:

<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
class LoginController extends Controller
{
/*
|--------------------------------------------------------------------------
| Login Controller
|--------------------------------------------------------------------------
|
| 该控制器处理应用程序的用户认证,并重定向至主页.
| 控制器使用PHP trait特性,可以方便地为您的应用程序提供其功能
|
*/
use AuthenticatesUsers;
/**
* Where to redirect users after login.
*
* @var string
*/
protected $redirectTo = '/home';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest')->except('logout');
}
}
可以看到 LoginController.php 使用了 AuthenticatesUsers trait.
您只需要将 trait 使用到您的 LoginController.php 文件中.

[自定义 token 的过期时间] 第二步:
查看 AuthenticatesUsers.php 文件,您将找到一个叫 sendLoginResponse 的方法,该方法被定义为 protected,该方法的内容如下:

/**
* Send the response after the user was authenticated.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
protected function sendLoginResponse(Request $request)
{
$request->session()->regenerate();
$this->clearLoginAttempts($request);
return $this->authenticated($request, $this->guard()->user())
?: redirect()->intended($this->redirectPath());
}

现在,您需要重写该方法,只需要复制 function sendLoginResponse(Request $request),将其简单添加到您的 LoginController.php 文件中即可。您的 LoginController.php 如下所示:

<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Cookie;
class LoginController extends Controller
{
/*
|--------------------------------------------------------------------------
| Login Controller
|--------------------------------------------------------------------------
|
| 该控制器处理应用程序的用户认证,并重定向至主页.
| 控制器使用PHP trait特性,可以方便地为您的应用程序提供其功能
|
*/
use AuthenticatesUsers;
/**
* Where to redirect users after login.
*
* @var string
*/
protected $redirectTo = '/home';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest')->except('logout');
}
protected function sendLoginResponse(Request $request) {
$request->session()->regenerate();
$this->clearLoginAttempts($request);
return $this->authenticated($request, $this->guard()->user())
?: redirect()->intended($this->redirectPath());
}
}
代码已被折叠,点此展开
[自定义 token 的过期时间] 第三步:
在您的 LoginController.php 文件中,只需用以下内容替换 sendLoginResponse () 方法

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());
}
函数方法中,定义变量 $customRememberMeTimeInMinutes,该值为设置「记住我」token 的过期时间 (以分钟为单位)。完成此操作后,只需要选中 “记住我” 复选框的情况下尝试登录,您将看到,「记住我」token 的过期时间变为 10 分钟,而不是 5 年

点赞

发表回复

电子邮件地址不会被公开。必填项已用 * 标注