Laravel PassportでOauth2 Password Grant認証の確認とPOSTMANでアクセス環境を整えるまで

```
バージョン Laravel 5.6
プロジェクト名 PassportSample
```

# 1. Laravel Passportのインストール
```sh
$ cd PassportSample # プロジェクトルートに移動
$ composer require laravel/passport
```
# 2. auth設定ファイルを変更
```diff:config/auth.php
    'guards' => [
       //...
        'api' => [
-           'driver' => 'token',
+           'driver' => 'passport',
            'provider' => 'users',
        ],
    ],
```

# 3. Userモデルにtraitを追加
```diff:app/User.php
<?php
//...
+ use Laravel\Passport\HasApiTokens;

class User extends Authenticatable
{
-    use Notifiable;
+    use HasApiTokens, Notifiable;

//...
```
# 4. マイグレーションを実行
```sh
$ php artisan migrate
```

# 5. サービスドライバーにpassportのrouteを追加
```diff:app/Providers/AuthServiceProvider.php
//...
+ use Laravel\Passport\Passport;

class AuthServiceProvider extends ServiceProvider
{
    //...
    /**
     * Register any authentication / authorization services.
     *
     * @return void
     */
    public function boot()
    {
        $this->registerPolicies();

-       //
+       Passport::routes();
    }
}
```

# 6. Oauth Clientを自動生成
```sh
$ php artisan passport:install
```
生成されていることを確認

```sh
$ php artisan tinker
Psy Shell v0.8.17 (PHP 7.0.25 — cli) by Justin Hileman
>>> \DB::table('oauth_clients')->get();
=> Illuminate\Support\Collection {#775
     all: [
       {#776
         +"id": 1,
         +"user_id": null,
         +"name": "Laravel Personal Access Client",
         +"secret": "oNjx4p7OcdXwB3rO5u6qIzSvarZbqtzC30razDyu",
         +"redirect": "http://localhost",
         +"personal_access_client": 1,
         +"password_client": 0,
         +"revoked": 0,
         +"created_at": "2018-01-17 13:24:39",
         +"updated_at": "2018-01-17 13:24:39",
       },
       {#778
         +"id": 2,
         +"user_id": null,
         +"name": "Laravel Password Grant Client",
         +"secret": "qCOu7Y91IMlnb7uiyzROmeROKRUJmX8T7AykzwHf",
         +"redirect": "http://localhost",
         +"personal_access_client": 0,
         +"password_client": 1,
         +"revoked": 0,
         +"created_at": "2018-01-17 13:24:39",
         +"updated_at": "2018-01-17 13:24:39",
       },
     ],
   }
```

# 7. ダミーユーザーを作成
```sh
$ php artisan tinker
Psy Shell v0.8.17 (PHP 7.0.25 — cli) by Justin Hileman
>>> factory(App\User::class, 1)->create();
=> Illuminate\Database\Eloquent\Collection {#804
     all: [
       App\User {#800
         name: "Taurean Beahan MD",
         email: "satterfield.sven@example.net",
         updated_at: "2018-01-17 13:50:49",
         created_at: "2018-01-17 13:50:49",
         id: 1,
       },
     ],
   }
>>> 
```

# 8. POSTMANでログインのテスト
![スクリーンショット 2018-01-19 18.48.52.png](https://qiita-image-store.s3.amazonaws.com/0/2469/1b8a5a0a-9cc0-6d81-fdd8-4aed77704cb7.png)

# 9. ユーザー情報取得のエンドポイントを追加
```php:routes/api.php
Route::group(['middleware' => 'auth:api'], function () {

    Route::get('me', function(){
        $user = Auth::user();
        return response()
            ->json(compact('user'));
    });

});
```

# 10. POSTMANでユーザー情報の取得のテスト
<img width="1064" alt="スクリーンショット 2018-06-05 17.25.15.png" src="https://qiita-image-store.s3.amazonaws.com/0/2469/666168bc-796c-11ab-05b4-ee7409eafa9c.png">

- 8で取得したtokenをヘッダーのAuthorizationに貼り付ける

# 11. POSTMANの環境変数を設定
<img width="1462" alt="スクリーンショット 2018-06-05 17.28.01.png" src="https://qiita-image-store.s3.amazonaws.com/0/2469/6ecf9dde-b93e-cd79-837c-614d11b87b41.png">

- 右上の設定 > Manage ENvironments > Addから環境を追加
- url, token, refresh_tokenを追加する
- urlにローカルサーバーのURLを入れ、tokenとrefresh_tokenは空のままにする

# 12. POSTMANのコレクションでパラメータの保存
- ログイン
<img width="1059" alt="スクリーンショット 2018-06-05 17.31.16.png" src="https://qiita-image-store.s3.amazonaws.com/0/2469/b787de03-9e9a-6f78-fc7c-460e0a22092d.png">

- ユーザー情報取得
<img width="1059" alt="スクリーンショット 2018-06-05 17.32.09.png" src="https://qiita-image-store.s3.amazonaws.com/0/2469/00133757-5b21-94e3-0ebb-c9335cc40134.png">

それぞれURLのホスト名部分を環境変数（url）に書き換えて名前をつけてリクエストを保存する

# 13. アクセストークンを変数化する
<img width="1060" alt="スクリーンショット 2018-06-05 17.35.20.png" src="https://qiita-image-store.s3.amazonaws.com/0/2469/9d27eab2-f86d-9717-6154-88f19c86f4d2.png">

- ユーザー情報取得（認証が必要なルート）のリクエストのTokenほ環境変数（token）に書き換えて保存する

<img width="1056" alt="スクリーンショット 2018-06-05 17.35.54.png" src="https://qiita-image-store.s3.amazonaws.com/0/2469/074b77d6-5fda-d6ad-645c-eea4073325a5.png">

```js
var data = JSON.parse(responseBody);
postman.setEnvironmentVariable("token", data.access_token);
postman.setEnvironmentVariable("refresh_token", data.refresh_token);
```

- ログイン時のテストスクリプトでaccess_token, refresh_tokenを環境変数に保存する

<img width="1462" alt="スクリーンショット 2018-06-05 17.37.18.png" src="https://qiita-image-store.s3.amazonaws.com/0/2469/906c3ae7-0faf-9940-2021-d6fd4adca3ab.png">

- ログイン時に自動でtokenが保存されていることが確認できる