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 Laravel\Passport\Passport; //這里載入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' => App\OuthUser::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 (\Illuminate\Http\Request $request){
      $http = new \GuzzleHttp\Client();

      $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 (\Illuminate\Http\Request $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 Laravel\Passport\HasApiTokens;
    class User extends Authenticatable{
      use HasApiTokens;
    }

七、結束

    參考:Passport(Laravel5.5.*)密碼授權簡單使用

       [ Laravel 5.7 文檔 ] 安全系列 —— API 認證(Passport)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM