• laravel5.7/passport 密码授权简单使用


    laravel/passport 有多种使用方式,本文只讲密码授权的使用方式。

    一、安装

        composer require laravel/passport
        php artisan migrate
        php artisan passport:install      // 自动创建两个默认客户端
        php artisan passport:client --password    //创建自己的password专用客户端

    二、增加路由: app/Providers/AuthServiceProvider.php文件中增加代码

        use LaravelPassportPassport; //这里载入Passport
        public function boot() {
          $this->registerPolicies();
          Passport::routes(); //这里加载passport路由 为 颁发访问令牌、撤销访问令牌、客户端以及私人访问令牌 注册必要的路由
          Passport::refreshTokensExpireIn(now()->addDays(30));//令牌默认长期有效 或tokensExpireIn 限制有效期
        }

    三、配置文件 config/auth.php 设置 api 认证 guard 的 driver 选项为 passport

        'guards' => [

          'api' => [
            'driver' => 'passport',
            'provider' => 'outhusers', //指定账号的provider中的表
          ],
        ],

        'providers' => [
          'outhusers' => [
            'driver' => 'eloquent',
            'model' => AppOuthUser::class,  //数据表model  密码验证的username password 就是此表中的账号密码
          ],
        ],

      注意需要自行创建 OuthUser 表,用于获取token

    四、获取token  (获取token可自行通过接口优化,设置为只传账号密码即可)

        // 访问 http://www.test.com/auth/password  即可看到token,api路由中访问:http://www.test.com/api/auth/password

        Route::get('/auth/password', function (IlluminateHttpRequest $request){
          $http = new GuzzleHttpClient();

          $response = $http->post('http://www.shop.org:7888/oauth/token', [
            'form_params' => [
              'grant_type' => 'password',  // 密码模式固定为 password
              'client_id' => '3',      // 通过 passport:client 创建的客户端id
              'client_secret' => 'CnHjnzGK4iY4qATfePzf9465kUNAD6m2mcFxQ6DE',  //通过 passport:client创建的客户端 secret
              'username' => 'admin@qq.com', //登录的用户名,OuthUser表中任意用户邮箱账号;
              'password' => 'admin123', //密码
              'scope' => '',  //作用域,可填写 * 或者为空
            ],
          ]);
          return json_decode((string)$response->getBody(), true);

        });

    五、设置路由保护

        前面用的是 guard 中的api

        Route::group(['middleware' => 'auth:api'], function ($router) {

          Route::get('/test', function (IlluminateHttpRequest $request){
            echo 'ok';
            exit;
          });// 将所有需要保护的路由放此处即可
        });

        Route::get('/user', function () { echo 'ok';})->middleware('auth:api');

    六、请求header设置访问令牌token

        // $accessToken 为返回的token
        $response = $client->request('GET', '/api/user', [
          'headers' => [
            'Accept' => 'application/json',
            'Authorization' => 'Bearer '.$accessToken,
          ],
        ]);

    6.5 其他

      添加 HasApiTokens trait(代码复用)到自己的接口模型中, 此模型提供一些辅助函数用于检查用户的token和scope
        use LaravelPassportHasApiTokens;
        class User extends Authenticatable{
          use HasApiTokens;
        }

    七、结束

        参考:Passport(Laravel5.5.*)密码授权简单使用

           [ Laravel 5.7 文档 ] 安全系列 —— API 认证(Passport)

  • 相关阅读:
    jQuery实现 自动滚屏操作
    jQuery实现全选、全不选以及反选操作
    读曾国藩
    把时间当作朋友 之感知时间
    把时间当作朋友4未知永远存在
    Android N 设置中语言列表介绍
    如何编译ICU资源
    idea常用快捷键
    shell 笔记
    Json笔记
  • 原文地址:https://www.cnblogs.com/mengwangchuan/p/10452865.html
Copyright © 2020-2023  润新知