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

在本文中,我们将讨论如何在Laravel中轻松定制「记住我」token的默认过期时间。我们还将了解Laravel中「记住我」token的过期时间的默认值。

简介:

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

Laravel中「记住我」token的过期时间默认值:

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

Laravel中「记住我」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年

如何在Laravel中修改「记住我」的过期时间

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://fullstackgeek.blogspot.com/2019/...

译文地址:https://learnku.com/laravel/t/40736

本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!