阅读(3945) (10)

Laravel 8 手动验证用户

2021-06-29 15:28:26 更新

请注意,你不是必须使用 Laravel Jetstream 附带的身份验证控制器。如果选择删除这些控制器,就需要直接使用 Lavarel 验证类。别担心,这很容易!

可以借助 Auth facade 访问 Laravel 服务,因此需要在类的开头导入 Auth 。下面来看看 attempt 方法:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class LoginController extends Controller
{
    /**
     * 处理认证尝试
     *
     * @param  \Illuminate\Http\Request $request
     *
     * @return Response
     */
    public function authenticate(Request $request)
    {
        $credentials = $request->only('email', 'password');

        if (Auth::attempt($credentials)) {
            // 认证通过...
            return redirect()->intended('dashboard');
        }
    }
}

attempt 方法的每个参数是一个关联数组。数组值用于在数据库中查找用户。在上面的例子中,将通过 email 列的值查找用户。如果找到该用户,将用存储在数据库中的哈希密码与数组中的 password 值做比较。不需要对 password 做哈希运算,框架在与数据库中的哈希密码做比较前自动对此值做哈希运算。如果两个哈希值匹配,将为该用户建立验证通过的 session。

如果验证成功, attempt 方法返回 true ,否则返回 false

重定向中的 intended 方法将经由身份验证中间件将用户重定向到身份验证前截获的 URL 。如果预期目标不存在,可以为此方法指定一个回退 URI 。