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 方法会接收一个数组来作为第一个参数,该参数提供的值将用于寻找数据库中的用户数据。逻辑如下:

    1. 使用 email 字段的值在数据库中查找;
    2. 如果用户被找到:
      1). 先将传参的 password 值进行哈希加密,然后与数据库中 password 字段中已加密的密码进行匹配;
      2). 如果匹配后两个值完全一致,会创建一个『会话』给通过认证的用户。会话在创建的同时,也会种下一个名为 laravel_session 的 HTTP Cookie,以此 Cookie 来记录用户登录状态,最终返回 true
      3). 如果匹配后两个值不一致,则返回 false
    3. 如果用户未找到,则返回 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') 将能获取到上一次用户提交的内容,这样用户就无需再次输入邮箱等内容

posted @ 2019-12-27 17:25  GIC扫地僧  阅读(234)  评论(0编辑  收藏  举报