laravel实践13.Auth方法验证用户登录
<?php namespace App\Http\Controllers; . . . use Auth; class SessionsController extends Controller { . . . public function store(Request $request) { $credentials = $this->validate($request, [ 'email' => 'required|email|max:255', 'password' => 'required' ]); if (Auth::attempt($credentials)) { // 登录成功后的相关操作 } else { // 登录失败后的相关操作 } return; } }
attempt
方法会接收一个数组来作为第一个参数,该参数提供的值将用于寻找数据库中的用户数据。逻辑如下:
- 使用
email
字段的值在数据库中查找; - 如果用户被找到:
1). 先将传参的password
值进行哈希加密,然后与数据库中password
字段中已加密的密码进行匹配;
2). 如果匹配后两个值完全一致,会创建一个『会话』给通过认证的用户。会话在创建的同时,也会种下一个名为laravel_session
的 HTTP Cookie,以此 Cookie 来记录用户登录状态,最终返回true
;
3). 如果匹配后两个值不一致,则返回false
; - 如果用户未找到,则返回
false
登录验证后的重定向:
if (Auth::attempt($credentials)) { session()->flash('success', '登录成功!'); return redirect()->route('users.show', [Auth::user()]); } else { session()->flash('danger', '很抱歉,您的邮箱和密码不匹配'); return redirect()->back()->withInput(); }
return redirect()->back()->withInput(); 登录失败时redirect()->back返回表单提交页面,使用 withInput()
后模板里 old('email')
将能获取到上一次用户提交的内容,这样用户就无需再次输入邮箱等内容