Laravel6 で ユーザー認証(Auth)機能を作成する|プログラムメモ
composer require laravel/passport
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
// ===== Trait =====
use HasApiTokens, Notifiable;
// ===== Trait =====
// Laravel Passport 追加
\Laravel\Passport\Passport::routes();
// Laravel Passport 追加
config/auth.php
'api' => [
// Laravel Passport へ変更 token → passport
'driver' => 'passport',
'provider' => 'users',
'hash' => false,
],
php artisan config:cache
php artisan tinker
App\User::create(['name' => 'test', 'email' => 'test@test.com', 'password' => bcrypt('test')]);
トークン作成を管理者が行う場合はこのようにバックエンドで作成するだけでOKです。
php artisan tinker
(id=1 の User のトークンを作成します。)
echo \App\User::find(1)->createToken('my_token')->accessToken;
トークンが表示されるのでコピーします。 なお、一番最後に改行コードがついてくるので、改行コードはコピーしないよう 注意してください。
Postmanでは以下のようにjsonを送信します。
成功すると json でトークンが帰ってきます
これらのクライアントを使用するといいでしょう。
https://chrome.google.com/webstore/detail/talend-api-tester-free-ed/aejoelaoggembcahagimdiliamlcdmfm
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"
}
<?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);
}
}
// 最後に追加
Route::post('/login', 'Api\AuthController@login');
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