Laravel 实现多字段登录的三种方法

下面三种方法基本原理都是相同的。

1. 方法一

使用 Laravel 自带认证系统,修改 /app/Http/Controllers/Auth/AuthController.php 文件,重写方法(原方法所在文件 /vendor/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php):

 代码如下 复制代码

namespace App\Http\Controllers\Auth;
......
use Illuminate\Http\Request; // 增加该行
 
class AuthController extends Controller
{
    protected $username = 'login';
 
    ....
 
    protected function getCredentials(Request $request)
    {
        $login = $request->get('login');
        $field = filter_var($login, FILTER_VALIDATE_EMAIL) ? 'email' : 'name';
 
        return [
            $field => $login,
            'password' => $request->get('password'),
        ];
    }
}

2. 方法二

修改 /app/Http/Controllers/Auth/AuthController.php 文件,这也是使用 Laravel 自带认证系统的一种方法。

 代码如下 复制代码

namespace App\Http\Controllers\Auth;
......
use Illuminate\Http\Request; // 增加该行
 
class AuthController extends Controller
{
 
    // 修改这里
    use AuthenticatesAndRegistersUsers, ThrottlesLogins {
        AuthenticatesAndRegistersUsers::postLogin as laravelPostLogin;
    }
 
    ......
 
    // 增加方法
    public function postLogin(Request $request)
    {
        $field = filter_var($request->input('login'), FILTER_VALIDATE_EMAIL) ? 'email' : 'name';
        $request->merge([$field => $request->input('login')]);
        $this->username = $field;
 
        return self::laravelPostLogin($request);
    }
}

3. 方法三

重写登录功能

LoginRequest.php:

 代码如下 复制代码

public function rules()
{
    return [
       'login' => 'required',
       'password' => 'required'
    ];
}
AuthController.php:

public function login(LoginRequest $request)
{
    $field = filter_var($request->input('login'), FILTER_VALIDATE_EMAIL) ? 'email' : 'username';
    $request->merge([$field => $request->input('login')]);
 
    if ($this->auth->attempt($request->only($field, 'password')))
    {
        return redirect('/');
    }
 
    return redirect('/login')->withErrors([
        'error' => 'These credentials do not match our records.',
    ]);
}

时间: 2024-08-31 01:26:27

Laravel 实现多字段登录的三种方法的相关文章

php mysql获取表字段名称和字段信息的三种方法_php技巧

php mysql获取表字段名称和字段信息的三种方法 先给出本实例中使用的表的信息: 使用desc获取表字段信息 php代码如下: <?php mysql_connect("localhost","root",""); mysql_select_db("test"); $query = "desc student"; $result = mysql_query($query); while($row=

js校验表单后提交表单的三种方法

本篇文章主要是对js校验表单后提交表单的三种方法进行了总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助 第一种:  代码如下: <script type="text/javascript">          function check(form) {             if(form.userId.value=='') {                 alert("请输入用户帐号!");                 form.us

js校验表单后提交表单的三种方法总结

作者: 字体:[增加 减小] 类型:转载 时间:2014-02-28 本篇文章主要是对js校验表单后提交表单的三种方法进行了总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助 第一种: 复制代码 代码如下: <script type="text/javascript">          function check(form) {           if(form.userId.value=='') {                 alert("请输入

php获取POST数据的三种方法实例详解_php实例

php获取POST数据的三种方法 方法一,$_POST $_POST或$_REQUEST存放的是PHP以key=>value的形式格式化以后的数据. 方法二,使用file_get_contents("php://input") 对于未指定 Content-Type 的POST数据,则可以使用file_get_contents("php://input");来获取原始数据. 事实上,用PHP接收POST的任何数据均使用本方法.而不用考虑Content-Type,

MYSQL添加远程用户或允许远程访问三种方法

mysql教程添加远程用户或允许远程访问三种方法 用root用户登陆,然后: grant all privileges on *.* to 创建的用户名 @"%" identified by "密码"; flush privileges;   * 刷新刚才的内容* 格式:grant 权限 on 数据库教程名.表名 to 用户@登录主机 identified by "用户密码";             @ 后面是访问mysql的客户端ip地址(或

SQL Server2005杂谈(4):在SQL Server2005中按列连接字符串的三种方法

本文为原创,如需转载,请注明作者和出处,谢谢! 上一篇:SQL Server2005杂谈(3):四个排名函数(row_number.rank.dense_rank和ntile)的比较 最近做一个项目,遇到一个在分组的情况下,将某一列的字段值(varchar类型)连接起来的问题,类似于sum函数对int型字段值求和. 如有一个表t_table,结构和数据如图1                                           图1     其中要按着xh字段分组,并且将每一组na

SQL Server2005杂谈(2):按列连接字符串的三种方法

本文为原创,如需转载,请注明作者和出处,谢谢! 最近做一个项目,遇到一个在分组的情况下,将某一列的字段值(varchar类型)连接起来的问题,类似于sum函数对int型字段值求和. 如有一个表t_table,结构和数据如图1                                           图1     其中要按着xh字段分组,并且将每一组name字段值连接起来.最终结果希望如图2所示              图2 表中的th字段值对于每一个xh值是唯一的,也是有限的,也就是

php获取POST数据的三种方法实例详解

php获取POST数据的三种方法 方法一,$_POST $_POST或$_REQUEST存放的是PHP以key=>value的形式格式化以后的数据. 方法二,使用file_get_contents("php://input") 对于未指定 Content-Type 的POST数据,则可以使用file_get_contents("php://input");来获取原始数据. 事实上,用PHP接收POST的任何数据均使用本方法.而不用考虑Content-Type,

Word中输入立方米符号的三种方法

  Word中输入立方米符号的三种方法         Word中输入立方米符号方法一:输入法输入 其实现在有些输入法中集成了很多特殊符号,例如搜狗拼音中就有立方米符号,我们只需要打出立方米的拼音,就会出现一个立方米符号的选项. Word中输入立方米符号方法二:利用制作上标的方法 用制作上标的方法可以做出立方米符号的效果,但这种方法其实还可以细分为几种不同的操作,下面一一进行介绍. 一.在Word文档中输入3,然后将其选中,切换到"开始"选项卡,单击"上标"按钮即可