若是某个模型类须要用于认证,必须继承自 Illuminate\Foundation\Auth\User
基类,不然会报错。而后在这个模型类中使用 Notifiable
Trait,里面提供了用户发送通知的相关方法。配置 $hidden
属性,在返回查询结果的时候将敏感信息过滤掉,避免安全隐患。
php
<?php namespace App\Models; use Illuminate\Foundation\Auth\User; use Illuminate\Notifications\Notifiable; class Manager extends User { use Notifiable; protected $hidden = ['password', 'remember_token']; }
public function login(Request $request) { $rs = \Auth::guard('admin')->attempt($request->only(['email', 'password'])); if ($rs) { return redirect()->intended('dashboard'); } }
attempt
方法接受一个键值对数组做为其第一个参数。数组中的值将被用于在数据表中查找用户。因此,在上例中,用户将经过 email
字段的值进行检索。若是找到了这个用户,数据库中保存的哈希密码将被用来与传递给方法的数组中 password
的哈希值进行比较。你不该该将指定为密码的 password
的值进行哈希操做,由于框架将在比较前,自动对其进行hash操做。若是这两个哈希密码匹配,就会为用户开启一个已认证的会话。html
若是认证成功那么 attempt
方法将返回 true
。反之,会返回 false
。laravel
重定向器上的 intended
方法将重定向用户到他们曾经但愿访问的 URL,这个 URL 以前被用户认证中间件拦截了。能够给这个方法传递一个回退 URI,用于预期的地址不可用的状况。web
若是想在应用中提供「记住我」的功能 ,你能够给 attempt
方法的第二个参数传入一个布尔值,这将永久保持用户的认证状态,或者直到他们手动注销登陆。固然,你的用户表必须包含名为 remember_token
的字符串字段,它将被用于保存「记住我」的令牌。数据库
if (Auth::attempt(['email' => $email, 'password' => $password], $remember)) { // 这个用户被记住了... }
若是你启用了「记住」用户,你可使用 viaRemember
方法肯定用户是否正使用「记住我」的cookie令牌进行的认证 数组
if (Auth::viaRemember()) { // }
要将用户从应用中注销,你可使用 Auth
门面上的 logout
方法。这将清除用户会话中的认证信息:安全
Auth::logout();
若是你须要把现存的用户实例登入应用, 你能够调用 login
方法并附带用户实例做为参数。给定的这个对象必须实现 Illuminate\Contracts\Auth\Authenticatable
契约,或者继承自Illuminate\Foundation\Auth\User基类。cookie
Auth::login($user); // 登陆而且「记住」给定的用户... Auth::login($user, true);
要使用用户的 ID 登陆应用,你可使用 loginUsingId
方法。这个方法接受须要认证的用户主键:app
Auth::loginUsingId(1); // 登陆而且「记住」给定的用户... Auth::loginUsingId(1, true);
你能够在单次请求中使用 once
方法将用户登陆到应用中。这将不会使用任何 Session 或者 Cookie,这意味着在构建无状态API时,此方法可能会有所帮助:框架
if (Auth::once($credentials)) { // }
Laravel 还提供了一种机制,用于将其它设备上的用户 Session 失效和「注销」,而不会使其当前设备上的 Session 失效。首先,你须要保证Illuminate\Session\Middleware\AuthenticateSession
中间件在你的app/Http/Kernel.php
类中的 web
中间件组中,而且没有被注释掉:
'web' => [ // ... \Illuminate\Session\Middleware\AuthenticateSession::class, // ... ],
而后, 你就可使用 Auth
门面上的 logoutOtherDevices
方法。此方法要求用户提供其当前密码,你的应用程序应经过输入表单接受该密码:
use Illuminate\Support\Facades\Auth; Auth::logoutOtherDevices($password);
官方文档:https://learnku.com/docs/laravel/5.7/authentication/2269#08b509