首页 > 开发 > PHP > 正文

基于Laravel5.4实现多字段登录功能方法示例

2024-05-04 22:46:00
字体:
来源:转载
供稿:网友

前言

最近在一个项目中需要实现一个多字段登录功能,简单来说就是可以使用用户名、邮箱或手机号任意一种方式进行登录。所以本文就来给大家介绍了关于Laravel5.4多字段登录的相关内容,分享出来供大家参考学习,话不多说了,来一起看看详细的介绍吧。

以下内容基于laravel5.4

方法如下:

首先,通过artisan工具生成auth模块

php artisan make:auth

这时候App/Http/Controllers目录下会新增一个Auth目录,该目录下为注册登录相关的控制器,resources/views目录下也会生成一些与注册登录相关的视图

laravel的官方文档中说手动认证用户需要使用Illuminate/Support/Facades/Auth类的attempt方法,如下:

<?phpnamespace App/Http/Controllers;use Illuminate/Support/Facades/Auth;class LoginController extends Controller{ /**  * Handle an authentication attempt.  *  * @return Response  */ public function authenticate() {  if (Auth::attempt(['email' => $email, 'password' => $password])) {   // Authentication passed...   return redirect()->intended('dashboard');  } }}

这个方法会根据你传入的参数判断数据库中是否存在与之相匹配的用户,如果存在并且密码正确返回true,反之返回false

遂在LoginController中添加该方法,但是好像并没有效果

于是开始观察LoginController的实现机制,发现它实现了一个AuthenticatesUsers的trait,追踪到这个trait的定义文件,发现这个文件就是我们想要的东西

里面有一个login方法,就是负责处理登录的逻辑

/**  * Handle a login request to the application.  *  * @param /Illuminate/Http/Request $request  * @return /Illuminate/Http/RedirectResponse|/Illuminate/Http/Response  */ public function login(Request $request) {  // 表单验证  $this->validateLogin($request);  // If the class is using the ThrottlesLogins trait, we can automatically throttle  // the login attempts for this application. We'll key this by the username and  // the IP address of the client making these requests into this application.  // 防止暴力破解,多次登录失败会根据IP锁定  if ($this->hasTooManyLoginAttempts($request)) {   $this->fireLockoutEvent($request);   return $this->sendLockoutResponse($request);  }    // 这个就是主要的负责判断数据库中是否存在相应的账号和密码的地方,我们需要重写的就是attemptLogin方法  if ($this->attemptLogin($request)) {   return $this->sendLoginResponse($request);  }  // If the login attempt was unsuccessful we will increment the number of attempts  // to login and redirect the user back to the login form. Of course, when this  // user surpasses their maximum number of attempts they will get locked out.  // 登录失败,失败次数++,防止暴力破解  $this->incrementLoginAttempts($request);  // 返回失败响应  return $this->sendFailedLoginResponse($request); }            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表