13. Laravel Passport OAuth 2.0
web
-
原理
- 注册,服务器生成session 返回用户session id
- 登录,服务器生成session 返回用户session id
- 认证,用用户传来的session id查找进行判断
-
准备
- 安装laravel框架
composer create-project --prefer-dist laravel/laravel=6.* web
- 安装node
https://nodejs.org/en/
- 安装ui扩展
composer require laravel/ui php artisan ui vue --auth
- 更换npm包源
npm install cnpm -g --registry=https://registry.npm.taobao.org cnpm install
- 编译
cnpm run prod
- 生成 migrate
php artisan migrate
- 访问web.com
web.com
- 取消注册
Auth::routes(['register' => false]);
-
使用
- 修改跳转地址
//LoginController RegisterController ResetPasswordController ConfimPasswordController VerificationController protected $redirectTo = '/'; //方法优先于属性定义 protected function redirectTo(){ //可以写一些逻辑 return 'path'; //return route('login'); }
- 认证字段修改
public function username(){ return 'name';//默认 email } //验证时 $request->validate([ $this->username() => 'required|string', 'password' => 'required|string' ])
- 获取登录后的信息
$user = Auth::user(); $id = Auth::id(); if (Auth::check());//最好使用中间件 $request->user()l//use Illuminate\Http\Request;
- 添加认证条件
Route::get('profile', function(){ //只有验证过的用户操作 })->middleware('auth'); public function __construct(){ $this->middleware('auth') } Route::get('/settings/security', function(){ //用户验证密码前的次数 })->middleware('password.confirm') 如果登录失败次数过多会禁用一段时间,默认是5次一分钟,判断的标准是useranme和ip
- 登出
Auth::logout();
手动认证用户
# 当你不喜欢自带的控制器去验证用户,你可以移除这些控制器
# 引入Auth facade, 利用 attempt 手动认证
class LoginController extends Controller
{
public function authenticate(Request $request)
{
$credentials = $request->only('email', 'password');
if (Auth::attempt($credentials)) {
return redirect('/some/uri');
}
}
}
// Route::post('/authenticate', 'Auth\LoginController@authenticate')->name('authenticate');
if (Auth::attempt(['email' => $email, 'password' => $password, 'active' => 1])) {
// 字段 active 必须是1
}
记住用户(无限期)
# $remeber 是个bool值
if (Auth::attempt(['email' => $email, 'password' => $password], $remember)) {
//the user is being remember... 内置的LoginController 已实现了 remember
}
Auth::login($user);
Auth::login($user, true);//记住
Auth::loginUsingId(1);
Auth::loginUsingId(1, true);
Auth::once($credentials);//临时认证,无状态的
无登录页面,利用弹窗请求认证用户
Route::get('/profile', function(){
})->middleware('auth.basic');
单设备登录
// 取消登录在别的设备上的认证
// 取消注释: \Illuminate\Session\Middleware\AuthenticateSession::class,
Auth::logoutOtherDevice($password);
api
1. 注册:用户注册成功后,随机生成长字符串作为token,原生token返回给用户。哈希后的token存入数据库。
2. 登录:用户使用账号密码登录成功, 随机生成长字符串用为token,原生token返回用户。哈希后的token存数据库
3. 认证:将用户传过来的token进行哈希,然后取数据库中查找哈希的token,找到就认证成功,否则失败。
创建项目与配置
composer create-project --prefer-dist laravel/laravel=6.* laravel6