13. Laravel Passport OAuth 2.0

web

  • 原理

    1. 注册,服务器生成session 返回用户session id
    2. 登录,服务器生成session 返回用户session id
    3. 认证,用用户传来的session id查找进行判断
  • 准备

    1. 安装laravel框架
    composer create-project --prefer-dist laravel/laravel=6.* web
    
    1. 安装node
    https://nodejs.org/en/
    
    1. 安装ui扩展
    composer require laravel/ui
    
    php artisan ui vue --auth
    
    1. 更换npm包源
    npm install cnpm -g --registry=https://registry.npm.taobao.org
    
    cnpm install 
    
    1. 编译
    cnpm run prod 
    
    1. 生成 migrate
    php artisan migrate
    
    1. 访问web.com
    web.com
    
    1. 取消注册
    Auth::routes(['register' => false]);
    
  • 使用

    1. 修改跳转地址
    //LoginController RegisterController ResetPasswordController ConfimPasswordController VerificationController
    
    protected $redirectTo = '/';
    
    //方法优先于属性定义
    protected function redirectTo(){
        //可以写一些逻辑
        return 'path';
        //return route('login');
    }
    
    
    1. 认证字段修改
    public function username(){
        return  'name';//默认 email
    }
    
    //验证时
    $request->validate([
         $this->username() => 'required|string',
        'password' => 'required|string'
    ])
    
    1. 获取登录后的信息
    $user = Auth::user();
    $id = Auth::id();
    if (Auth::check());//最好使用中间件
    $request->user()l//use Illuminate\Http\Request;
    
    1. 添加认证条件
    Route::get('profile', function(){
        //只有验证过的用户操作
    })->middleware('auth');
    
    public function __construct(){
        $this->middleware('auth')
    }
    
    Route::get('/settings/security', function(){
        //用户验证密码前的次数
    })->middleware('password.confirm')
    
    如果登录失败次数过多会禁用一段时间,默认是5次一分钟,判断的标准是useranme和ip
    
    1. 登出
    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

posted on 2023-02-28 11:41  何苦->  阅读(76)  评论(0编辑  收藏  举报

导航