版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/loophome/article/details/84108302
一、登录模块路由
路由名称 | 请求方式 | 方法实现 |
/login | GET | 登录页面 |
/login | POST | 实现登录功能 |
/logout | POST | 实现登出功能 |
二、控制器解析
跟注册的控制器一样,大部分的逻辑使用trait引入。
$redirectTo配置,如果在登录状态,重定向的页面
protected $redirectTo = '/home';
非常简单一个控制器。
三、登录状态判断
登录状态判断与使用,使用Auth facade 来判断
// 获取当前通过认证的用户
$user = Auth::user();
// 获取当前通过认证的用户 ID
$id = Auth::id();
//判断是否已登录
Auth::check();
在blade模板中,可以使用@guest标签来处理
@guest
未登录
@else
已登录,用户名:{{ Auth::user()->name }}
@endguest
四、扩展开发:自定义的登录行为
默认生成的代码,使用email进行登录,这里我们尝试修改为可使用用户名、电子邮箱、手机号这三种方式之一来登录。
1)在auth/login.blade.php模板中,把email字段修改为login_name(当然,这个字段是自定义的)
2)修改登录的行为
登录行为位于Illuminate\Foundation\Auth\AuthenticatesUsers::login方法中
$this->validateLogin($request);
验证登录参数,由于我们改了字段,需要重写这个方法,并修改sendFailedLoginResponse的提示信息。
protected function validateLogin(Request $request)
{
$this->validate($request, [
'login_name' => 'required|string',
'password' => 'required|string',
]);
}
protected function sendFailedLoginResponse(Request $request)
{
throw ValidationException::withMessages([
'login_name' => [trans('auth.failed')],
]);
}
$this->attemptLogin($request);
实现登录逻辑,需要循环3个字段查找。$this->guard()->attempt实现了从数据库中获取User实例。
protected function attemptLogin(Request $request)
{
foreach (['name', 'email', 'phone'] as $loginName) {
$requestArr = [
$loginName => $request->input('login_name'),
'password' => $request->input('password'),
];
$loginStatus = $this->guard()->attempt(
$requestArr, $request->filled('remember')
);
if ($loginStatus) {
return $loginStatus;
}
}
return false;
}
Ok,我们自定义的登录行为就完成了,可以看看我的demo:http://shebao.bytrees.com/login