一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

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

时间:2022-06-25 00:40:25 编辑:袖梨 来源:一聚教程网

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

1. 方法一

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

代码如下 复制代码

namespace AppHttpControllersAuth;
......
use IlluminateHttpRequest; // 增加该行

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 AppHttpControllersAuth;
......
use IlluminateHttpRequest; // 增加该行

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.',
]);
}

热门栏目