🗂
【Laravel】Sanctomを使用してSPAでの会員登録を実装する
使用環境
- Laravel Framework 8.32.1
フロント側
フロントからは、名前、メールアドレス、パスワードが渡される想定です。
作成までの流れ
- Laravel Sanctomのインストールしてデータベースを作成する
- Laravel Sanctomの使用設定をする
- APIでの会員登録実装
- フロント側の作成
Laravel Sanctomのインストール
下記のコマンドでインストール
$ composer require laravel/sanctum
設定ファイルとマイグレーションのインストール
$ php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
コマンド実行により/config/sanctum.php
と、
/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php
が作成されます。
$ php artisan migrate
データベースを作成されます。
Laravel Sanctomの使用設定をする
Kernel.phpにミドルウェアの追加
app/Http/Kernel.php
protected $middlewareGroups = [
'web' => [
/* 省略 */
],
'api' => [
EnsureFrontendRequestsAreStateful::class,//追記
'throttle:api',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
];
User ModelにHasApiTokensトレイトを追加する
app/Models/User.php
<?php
namespace App\Models;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;//追記
class User extends Authenticatable
{
use HasFactory, Notifiable, HasApiTokens;//追記
/* 省略 */
APIでの会員登録実装
今回は、app/Http/Controller/Api/Auth
配下にファイルを作成していきます。
app/Http/Controller/Api/Auth/RegisterController.php
<?php
namespace App\Http\Controllers\Api\Auth;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Symfony\Component\HttpFoundation\Response;
use App\Http\Controllers\Controller;
use App\Http\Requests\RegisterRequest;
use App\Providers\RouteServiceProvider;
use App\Models\User;
class RegisterController extends Controller {
public function register(RegisterRequest $request) {
User::create([
'name' => $request->name,
'email' => $request->email,
'password' => Hash::make($request->password),
]);
return response()->json(['created' => true], Response::HTTP_OK);
}
}
バリデーションは、app/Http/Requests
内に記載します。
app/Http/Requests/RegisterRequest.php
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Contracts\Validation\Validator;
use Illuminate\Http\Exceptions\HttpResponseException;
use Symfony\Component\HttpFoundation\Response;
class RegisterRequest extends FormRequest {
public function authorize() {
return true;
}
public function rules() {
return [
'name' => //必要なバリデーション,
'email' => //必要なバリデーション,
'password' => //必要なバリデーション,
];
}
protected function failedValidation(Validator $validator) {
$res = response()->json([
'status' => Response::HTTP_BAD_REQUEST,
'errors' => $validator->errors(),
], Response::HTTP_BAD_REQUEST);
throw new HttpResponseException($res);
}
}
ルーティングを記載します。
routes/api.php
<?php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Api\Auth\RegisterController;//追記
/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| is assigned the "api" middleware group. Enjoy building your API!
|
*/
//会員登録
Route::post('/register', [RegisterController::class, 'register']);//追記
これでバックエンド側の処理は完了しました。
参考記事
Discussion