Listening to the Words

laravel学习之Auth验证类

Auth::attempt()

Laravel 默认提供的内置认证控制器功能非常强大,只需要你做简单的几行代码配置即可完成整个登录功能的构建
借助 Laravel 提供的 Auth 的 attempt 方法可以让我们很方便的完成用户的身份认证操作,如下所示:

if (Auth::attempt(['email' => $email, 'password' => $password])) {
    // 该用户存在于数据库,且邮箱和密码相符合
}

attempt 方法会接收一个数组来作为第一个参数,该参数提供的值将用于寻找数据库中的用户数据。因此在上面的例子中,attempt 方法执行的代码逻辑如下:

  1. 使用 email 字段的值在数据库中查找;

如果用户被找到:

1). 先将传参的 password 值进行哈希加密,然后与数据库中 password 字段中已加密的密码进行匹配;

2). 如果匹配后两个值完全一致,会创建一个『会话』给通过认证的用户。会话在创建的同时,也会种下一个名为 laravel_sessionHTTP Cookie,以此 Cookie 来记录用户登录状态,最终返回 true;

3). 如果匹配后两个值不一致,则返回 false;

如果用户未找到,则返回 false。

Auth::attempt()方法可以用来验证用户提交的登陆信息是否和 user表里的匹配,在例子中, password这个字段是固定的,你在 user表中也应当有对应的字段,并且宽度至少60, 切记不是MD5 。而 email字段就随便了,可能你是使用 username作为唯一标识符的,这个因项目而异吧,这里就随便以 email作为登陆账户名了,数据库中也有相应的字段。
可能有人会比较难以理解,其实只要换个角度,Auth只是帮我们实现了本来需要自己写的验证逻辑,还记得一开始配置的参数中有model和table,Auth就是根据这个自动帮我们查询,如果匹配成功会自动帮我们写入session,这样下次 Auth::check()的时候就通过了。

Auth::check()

Laravel 提供了 Auth::check() 方法用于判断当前用户是否已登录,已登录返回 true,未登录返回 false。

Auth::login($user);

在 Laravel 中,如果要让一个已认证通过的用户实例进行登录,可以使用以下方法:
注册后自动登录

Auth::login($user);

Auth::logout()

Laravel 默认提供的 Auth::logout() 方法来实现用户的退出功能

点赞