😎
【Laravel】Sanctomを使用してSPAでのログインを実装する
使用環境
- Laravel Framework 8.32.1
会員登録の実装はこちら
フロント側
フロントからは、メールアドレス、パスワードが渡される想定です。
作成までの流れ
- コントローラーの作成
- バリデーションの作成
- ルーティングの追加
- フロント実装
コントローラーの作成
会員登録と同様に、app/Http/Controller/Api/Auth
配下にファイルを作成していきます。
app/Http/Controller/Api/Auth/LoginController.php
<?php
namespace App\Http\Controllers\Api\Auth;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
use Auth;
use App\Http\Controllers\Controller;
use App\Http\Requests\LoginRequest;
class LoginController extends Controller {
public function login(LoginRequest $request) {
$credentials = $request->validated();
if (Auth::attempt($credentials)) {
$user = Auth::user();
$user->tokens()->delete();
$token = $user->createToken("login:user{$user->id}")->plainTextToken;
return response()->json([
'result' => true,
'token' => $token
], Response::HTTP_OK);
}
return response()->json([
'result' => false,
], Response::HTTP_INTERNAL_SERVER_ERROR);
}
バリデーションの作成
app/Http/Requests
配下にLoginRequests.php
を作成します。
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 LoginRequest extends FormRequest {
public function authorize() {
return true;
}
public function rules() {
return [
'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;
use App\Http\Controllers\Api\Auth\LoginController;//追記
/*
|--------------------------------------------------------------------------
| 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']);
//ログイン
Route::post('/login', [LoginController::class, 'login']);//追記
/* 省略 */
バックエンド側の処理は以上で完成です。
Discussion