Auth::attempt()
Laravel 默认提供的内置认证控制器功能非常强大,只需要你做简单的几行代码配置即可完成整个登录功能的构建
借助 Laravel 提供的 Auth 的 attempt 方法可以让我们很方便的完成用户的身份认证操作,如下所示:
if (Auth::attempt(['email' => $email, 'password' => $password])) {
// 该用户存在于数据库,且邮箱和密码相符合
}
attempt
方法会接收一个数组来作为第一个参数,该参数提供的值将用于寻找数据库中的用户数据。因此在上面的例子中,attempt
方法执行的代码逻辑如下:
- 使用 email 字段的值在数据库中查找;
如果用户被找到:
1). 先将传参的 password
值进行哈希加密,然后与数据库中 password
字段中已加密的密码进行匹配;
2). 如果匹配后两个值完全一致,会创建一个『会话』给通过认证的用户。会话在创建的同时,也会种下一个名为 laravel_session
的 HTTP 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() 方法来实现用户的退出功能