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

2025-05-27 0 28

前言

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

以下内容基于laravel5.4

方法如下:

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

php artisan make:auth

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

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

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21
<?php

namespace 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方法,就是负责处理登录的逻辑

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35
/**

* 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);

}

分析了一波这个文件,发现主要进行登录判断的就是attemptLogin方法,我们只要重写这个方法即可,先看看原来的是怎么写的,根据原来的进行重写:

?

1

2

3

4

5

6

7

8

9

10

11

12
/**

* Attempt to log the user into the application.

*

* @param \\Illuminate\\Http\\Request $request

* @return bool

*/

protected function attemptLogin(Request $request)

{

return $this->guard()->attempt(

$this->credentials($request), $request->has('remember')

);

}

在LoginController重写后:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31
public function attemptLogin(Request $request)

{

$username = $request->input('username');

$password = $request->input('password');

// 验证用户名登录方式

$usernameLogin = $this->guard()->attempt(

['username' => $username, 'password' => $password], $request->has('remember')

);

if ($usernameLogin) {

return true;

}

// 验证手机号登录方式

$mobileLogin = $this->guard()->attempt(

['mobile' => $username, 'password' => $password], $request->has('remember')

);

if ($mobileLogin) {

return true;

}

// 验证邮箱登录方式

$emailLogin = $this->guard()->attempt(

['email' => $username, 'password' => $password], $request->has('remember')

);

if ($emailLogin) {

return true;

}

return false;

}

只需要用attempt方法进行多次判断即可,只要成功就返回true,不成功继续用其他字段进行判断,都不成功则返回flase

测试,可以实现多字段登录效果

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对快网idc的支持。

原文链接:https://segmentfault.com/a/1190000010475708

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 基于Laravel5.4实现多字段登录功能方法示例 https://www.kuaiidc.com/72090.html

相关文章

发表评论
暂无评论