人気のPHP WEBアプリケーションフレームワークLaravelのTipsを記録していきます

Laravel Passport をインストールする

● Laravel6 の Auth をインストールする

Laravel6 で ユーザー認証(Auth)機能を作成する|プログラムメモ

● Laravel Passport をインストールする

composer require laravel/passport

● .env にDB設定の記述

● DBテーブルの作成

php artisan migrate

こちらのテーブルが作成されます。

● キーの作成

php artisan passport:install

次のような結果が返ってきます

Encryption keys generated successfully.
Personal access client created successfully.
Client ID: 1
Client secret: S37VP14Txxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Password grant client created successfully.
Client ID: 2
Client secret: MCAW4tmxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
「client_id: 1」が、「5. Personal Access Client」
「client_id: 2」が、「2. Password Grant Client」

です。

● 認証の種類について

Laravel Passportの認証には次の種類があるようです。

・1. OAuth2 with authorization codes (Auth Code)→SNS認証でよく使うやつ(確認画面あり・Code発行あり)
・2. Password Grant Token(確認画面無し。Codeなし。ID, PWでTokenを発行)
・3. Implicit Grant Token(いきなりTokenを発行。安全性に問題?)
・4. Client Credentials Grant Token(マシン間通信向け。個人の認証無し)
・5. Personal Access Token(その名の通り、個人・内部利用向け)

引用 : http://bit.ly/2G9or9H
http://bit.ly/2Gb9WSJ

● app/User.php に HasApiTokens トレイトを追加

app/User.php

    // ===== Trait =====
    use HasApiTokens, Notifiable;
    // ===== Trait =====

● app/Providers/AuthServiceProvider.php の boot メソッドに追加

        // Laravel Passport 追加
        \Laravel\Passport\Passport::routes();
        // Laravel Passport 追加

● config/auth.php を変更

config/auth.php

        'api' => [
            // Laravel Passport へ変更 token → passport
            'driver' => 'passport',
            'provider' => 'users',
            'hash' => false,
        ],

● artisan の キャッシュをクリア

php artisan config:cache

● ユーザーを作成する

php artisan tinker
App\User::create(['name' => 'test', 'email' => 'test@test.com', 'password' => bcrypt('test')]);

●(トークン作成方法 1)作成したユーザーのトークンを tinker で作成する

トークン作成を管理者が行う場合はこのようにバックエンドで作成するだけでOKです。

php artisan tinker

(id=1 の User のトークンを作成します。)

echo \App\User::find(1)->createToken('my_token')->accessToken;

トークンが表示されるのでコピーします。 なお、一番最後に改行コードがついてくるので、改行コードはコピーしないよう 注意してください。

● (トークン作成方法 2)作成したユーザーのトークンを ユーザー自身が作成する

Postmanでは以下のようにjsonを送信します。

成功すると json でトークンが帰ってきます

● 接続をテストする

これらのクライアントを使用するといいでしょう。

*Postman

https://www.getpostman.com/

*Talend API Tester

https://chrome.google.com/webstore/detail/talend-api-tester-free-ed/aejoelaoggembcahagimdiliamlcdmfm

● トークンを使って /api/user へ GET アクセスする

Headers を次のようにして GET でアクセスします

KEY VALUE
Accept application/json
Authorization Bearer <取得したトークン>

Bearer の後にスペースをつけて トークンを入力して GET でアクセスします。

成功すると次のようなjsonが取得できます

{
    "id": 1,
    "name": "test",
    "email": "test@test.com",
    "email_verified_at": null,
    "created_at": "2020-01-20 21:18:21",
    "updated_at": "2020-01-20 21:18:21"
}

● ユーザーにトークン作成を行わせる

*1. app/Http/Controllers/Api/AuthController.php を作成する

<?php
namespace App\Http\Controllers\Api;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class AuthController extends Controller
{
    public function login(Request $request) {
        $credentials = $request->only('email', 'password');
        if(auth()->attempt($credentials)) {
            $user = auth()->user();
            $token = $user->createToken('my_token')->accessToken;
            return ['access_token' => $token];
        }
        return response([
            'message' => 'Unauthenticated.'
        ], 401);
    }
}

*2. routes/api.php の一番後ろに追加

// 最後に追加
Route::post('/login', 'Api\AuthController@login');

*3. /api/login へ POSTアクセスする

Params を次のようにして POST でアクセスします

KEY VALUE
emai test@test.com
password test

成功すると、トークンが帰ってきます。

● クライアントを追加する

php artisan passport:client --personal

実行すると以下を聞かれます

1. クライアント名
 What should we name the personal access client? [Laravel Personal Access Client]:
 > myclient

Personal access client created successfully.
Client ID: 3
Client secret: mI5Q25xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
php artisan passport:client --password
添付ファイル1
添付ファイル2
No.1663
01/21 10:16

edit

添付ファイル