プロジェクトの作成とSanctumの導入
$ laravel new hello-sanctum
$ cd hello-sanctum
- Sanctumのインストール
$ composer require laravel/sanctum
- configファイルとmigrationファイルの作成
$ php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
- .env内のDBパラメータを任意の値に設定
.env
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=
- migrationの実行
$ php artisan migrate
- ダミーユーザーを作成
$ php artisan tinker
>>> factory(App\User::class)->create()
=> App\User {#3054
name: "Dr. Gerry Jast",
email: "mschroeder@example.com",
email_verified_at: "2020-05-13 11:00:44",
updated_at: "2020-05-13 11:00:44",
created_at: "2020-05-13 11:00:44",
id: 1,
}
Userモデルにトークン認証用の設定を追記
app/User.php
use Laravel\Sanctum\HasApiTokens;
class User extends Authenticatable
{
use HasApiTokens, Notifiable;
認証用のコントローラの作成
$ php artisan make:controller AuthController
app/Http/Controllers/AuthController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class AuthController extends Controller
{
public function login(Request $request)
{
if (!Auth::attempt(request(['email', 'password']))) {
return response()->json([
'message' => 'Unauthorized'
], 401);
}
$accessToken = Auth::user()->createToken('authToken')->plainTextToken;
return response()->json([
'access_token' => $accessToken,
]);
}
}
認証用ルートの作成
routes/api.php
// ログイン
Route::post('/login', 'AuthController@login');
// ユーザー情報の取得
Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
return $request->user();
});
お試し
- ビルトインサーバーを起動
$ php artisan serve
- ログインしてトークンを発行(Postman)
PostmanのHeaders
Content-Type:application/json
X-Requested-With:XMLHttpRequest
PostmanのBody(form-data)
email:mschroeder@example.com #ダミーユーザーを作成したときのemail
password:password
- 認証つきのURLにアクセス(Postman)
PostmanのHeaders
Content-Type:application/json
X-Requested-With:XMLHttpRequest
Authorization:Bearer access_token #ログインのリクエストで返却されたaccess_token
その他
config/sanctum.php
'expiration' => 1, // これを設定すると有効期限(分)をつけれる