Laravel Sanctum は、Laravel フレームワークによって公式に推奨されている軽量のユーザー認証ライブラリであり、シングル ページ アプリケーション (SPA) およびモバイル アプリケーションにシンプルで最新の認証を提供するように設計されています。この記事では、Laravel Sanctumを使用してSPAアプリケーションのセキュリティ認証を実装する方法を紹介します。
1. Laravel をインストールする
最初に Laravel をインストールする必要があります。コンポーザーを通じて最新バージョンの Laravel をインストールできます:
composer create-project --prefer-dist laravel/laravel your -プロジェクト名
2. Sanctum の設定
Laravel をインストールした後、Sanctum を設定する必要があります。最初に次のコマンドを実行してください:
composer require laravel/sanctum
Laravel 5.5 以前のバージョンでは、config/app.php ファイルにサービスプロバイダーとファサードを追加する必要があります:
'providers' => [
... LaravelSanctumSanctumServiceProvider::class,
],
'aliases' => [
... 'Sanctum' => LaravelSanctumSanctum::class,
],
Laravel 5.5 以降では、サービスプロバイダーやファサードを手動で追加する必要はありません。
次に、データベースの移行を実行して、Sanctum に必要なテーブルを作成する必要があります。
php 職人の移行
アプリケーションで SPA 認証を使用する必要がある場合は、次の場所にある必要があります。 config/ アプリケーション ドメインと信頼できるドメインを cors.php ファイルに追加します。以下の例では、フロントエンド アプリケーションを使用してバックエンド API を構築していると想定しています:
'paths' => ['api/*', 'sanctum/csrf-cookie'],
'allowed_methods' => ['*'],
'allowed_origins' => ['http://your-app-url.com'],
'allowed_origins_patterns ' => [],
'allowed_headers' => ['*'],
'exused_headers' => false,
'max_age ' => ; false,
'supports_credentials' => true,
3. API と認証コントローラーを作成します
resource/views に、index.blade.php ファイルを作成します。 SPAインターフェイス。
routes/api.php に API ルートを記述します。ここでテスト ルートを作成し、現在認証されているユーザーのユーザー情報を返します。
Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
return $request->user();
});
次に、Sanctum トークンを作成および管理するために SPA アプリケーション固有のコントローラーを追加する必要があります。このコントローラーは、トークンの作成とユーザーの認証 Cookie の発行を担当します。
最初に、AuthController などの API コントローラーを app/Http/Controllers フォルダーに作成します。
php 職人 make:controller API/AuthController
次に、それを AuthController Register に追加します。およびログインメソッド:
public function register(Request $request)
{
$request->validate([ 'name' => 'required|string|max:255', 'email' => 'required|string|email|unique:users|max:255', 'password' => 'required|string|min:8|confirmed' ]); $user = new User([ 'name' => $request->name, 'email' => $request->email, 'password' => Hash::make($request->password) ]); $user->save(); return response()->json([ 'message' => 'Successfully registered' ], 201);
}
public function login(Request $request)
{
$request->validate([ 'email' => 'required|string|email', 'password' => 'required|string', 'remember_me' => 'boolean' ]); $credentials = request(['email', 'password']); if (!Auth::attempt($credentials)) { return response()->json([ 'message' => 'Unauthorized' ], 401); } $user = $request->user(); $tokenResult = $user->createToken('Personal Access Token'); $token = $tokenResult->token; if ($request->remember_me) { $token->expires_at = Carbon::now()->addWeeks(1); } $token->save(); return response()->json([ 'access_token' => $tokenResult->accessToken, 'token_type' => 'Bearer', 'expires_at' => Carbon::parse( $tokenResult->token->expires_at )->toDateTimeString() ]);
}
4. 認証の処理
トークン、ユーザー登録、ユーザー ログインの作成に必要なコードがすべて揃ったので、認証プロセスの構築を開始します。
SPA アプリケーションは、Sanctum を使用して POST リクエストを送信し、電子メールとパスワードのパラメーターを介してユーザーの資格情報を検証します。認証が成功すると、アプリケーションは OAuth トークンを受け取ります。
SPA アプリケーションを使用する場合、ヘッダーに Authorization: Bearer d6fb5a6237ab04b68d3c67881a9080fa を追加して、アプリケーション ルーティングを通じて保護された API にアクセスします。
認証が完了すると、Sanctum 経由の認証ルートを使用して、現在認証されているユーザーの情報を取得できます。たとえば、次のコードを使用して、現在認証されているユーザーの名前を取得できます。
Route::middleware('auth:sanctum')->get('/user', function (Request $request ) {
return $request->user()->name;
});
5. 関連するページとコンポーネントを作成する
Laravel エントリ ポイント ファイルに必要な JavaScript ライブラリが含まれていることを確認してください (ここでは Vue.js を使用しています)。 Vue ルーターと Axios )。 resource/js/app.js ファイルで、Vue コンポーネントを定義します:
require('./bootstrap');
import Vue from 'vue';
import App from ' ./views/App';
'./router' からルーターをインポート;
'./store' からストアをインポート;
Vue.component('App', App);
const app = new Vue({
el: '#app', router, store
});
リソース フォルダーのビューとビュー/App.vue を作成し、必要なコンポーネント (ログイン フォーム、登録フォームなど) を追加します。 .)。必要なすべてのページ コンポーネントをビュー フォルダーに作成します。
デモンストレーションの都合上、コード量が若干多くなっておりますので、Laravel の公式ドキュメントを参照してください。
6. API ルーティングと AckController を再構築します
API ルーティングを更新し、SPA ルーティングを AckController にマッピングし、ミドルウェアが Sanctum 構成を使用するようにします:
Route::middleware('auth : sanctum')->get('/user', function (Request $request) {
return $request->user();
});
Route::post('/register', 'APIAuthController@ register ');
Route::post('/login', 'APIAuthController@login');
Route::middleware('auth:sanctum')->get('/spa/ { any}', function () {
return view('index');
})->where('any', '.*');
To を使用して、AckController にfounderPassword メソッドとresetPassword メソッドを追加します。パスワードを忘れたユーザーからのリクエストを処理し、パスワード リセット リンクに応答します:
public functionforgetPassword(Request $request)
{
$request->validate(['email' => 'required|email']); $user = User::where('email', $request->email)->first(); if (!$user) { return response()->json([ 'message' => 'We could not find your account' ], 404); } else { $user->sendPasswordResetNotification($request->email); } return response()->json([ 'message' => 'We have e-mailed your password reset link!' ]);
}
public function replacePassword (リクエスト $request)
{
$request->validate([ 'email' => 'required|email', 'token' => 'required|string', 'password' => 'required|string|confirmed|min:8' ]); $resetPasswordStatus = Password::reset($request->only('email', 'password', 'password_confirmation', 'token'), function ($user, $password) { $user->forceFill([ 'password' => Hash::make($password) ])->save(); }); if ($resetPasswordStatus === Password::INVALID_TOKEN) { return response()->json(['message' => 'The reset token is invalid']); } return response()->json(['message' => 'Your password has been updated']);
}
7. ルーティングの追加
Laravel Sanctum では、認証、CSRF 保護、エラー保護を有効にするようにルーティングを設定し、groban/laravel-livewire を使用して SPA アプリケーションのルーティングを実装する必要があります。
8. SPA アプリケーションを実行します
上記の手順を完了したら、次のコマンドを使用して SPA アプリケーションを実行できます:
npm run dev
Open inブラウザ デバイス上でホスト IP アドレスまたは URL を実行して、SPA アプリケーションを表示します。
最後に、Laravel Sanctum を使用して SPA アプリケーションのセキュリティ認証を実装することに成功しました。このアプローチにより、アプリケーション データを保護し、不正アクセスを防止し、個人情報を保護することができます。
以上がPHP 開発: Laravel Sanctum を使用して SPA アプリケーションのセキュリティ認定を実装するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。