ユーザー認証
Overview
このガイドでは、Lambel のネイティブ認証機能を使用して MongoDB ユーザーを認証する方法を学習できます。
Lambda は、ユーザーの認証方法を定義する監視方法や、ユーザーの検索方法を定義するプロバイダーなどの認証サービスを含むネイティブ Auth
モジュールを提供しています。これらのサービスの詳細については、Lambel ドキュメントの 認証 を参照してください。
ユーザーモデルの変更
デフォルトでは、Lambda はApp/Models
ディレクトリにUser
Eloquet モデルを生成します。 MongoDB ユーザーの認証を有効にするには、 User
モデルでMongoDB\Laravel\Auth\User
クラスを拡張する必要があります。
このクラスを拡張するには、 app/Models/User.php
ファイルに移動し、 use Illuminate\Foundation\Auth\User as Authenticatable
ステートメントを次のコードで置き換えます。
use MongoDB\Laravel\Auth\User as Authenticatable;
次に、次のコードに示すように、 User
クラスがAuthenticatable
を拡張していることを確認します。
class User extends Authenticatable { ... }
User
モデルを構成したら、対応するコントローラーを作成します。 コントローラーの作成方法については、このページの「 ユーザー コントロールの作成」セクションを参照してください。
例
次のコードは、 MongoDB\Laravel\Auth\User
クラスを拡張するUser.php
ファイルを示しています。
namespace App\Models; use MongoDB\Laravel\Auth\User as Authenticatable; class User extends Authenticatable { protected $connection = 'mongodb'; protected $table = 'users'; protected $fillable = [ 'name', 'email', 'password', ]; protected $hidden = [ 'password', 'remember_token', ]; }
ユーザー コントロールの作成
認証を管理する関数を保存するには、 User
モデルの認証コントローラーを作成します。
プロジェクト ルートから次のコマンドを実行してコントローラーを作成します。
php artisan make:controller <filename>
例
次のコマンドを実行すると、 AuthController.php
というコントローラー ファイルが作成されます。
php artisan make:controller AuthController
ファイルには、次のコードに示すように、ユーザー認証を管理するための 関数と 関数を保存できます。AuthController.php
login()
logout()
namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Illuminate\Validation\ValidationException; use function response; class AuthController extends Controller { public function login(Request $request) { $request->validate([ 'email' => 'required|email', 'password' => 'required', ]); if (Auth::attempt($request->only('email', 'password'))) { return response()->json([ 'user' => Auth::user(), 'message' => 'Successfully logged in', ]); } throw ValidationException::withMessages([ 'email' => ['The provided credentials are incorrect.'], ]); } public function logout() { Auth::logout(); return response()->json(['message' => 'Successfully logged out']); } }
ユーザー認証をカスタマイズする
アプリケーションのニーズに合わせて認証ファイルをカスタマイズし、追加の認証機能を有効にすることができます。
このセクションでは、次の機能を使用して MongoDB ユーザー認証プロセスをカスタマイズする方法について説明します。
Lambda Triggers
Lambda は、API リクエストと単一ページのアプリケーション認証を管理できる認証パッケージです。 API リクエストを管理するために、Realm はデータベースに保存されている API トークンを発行し、 Authorization
ヘッダーを使用して受信 HTTP リクエストを認証します。 単一ページ アプリケーションを認証するために、SAN は Lambda のクッキーベースの認証サービスを使用します。
Lambda をインストールして、アプリケーションの認証プロセスを管理できます。 プロジェクト ルートから次のコマンドを実行して Lambda Triggers をインストールし、その移行ファイルを公開します。
composer require laravel/sanctum php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
Lambda 統合で Lambda 統合を使用するには、Storage が提供するPersonalAccessToken
モデルを変更して、 MongoDB\Laravel\Eloquent
名前空間のDocumentModel
trait を使用します。 次のコードは、 PersonalAccessToken
モデルを変更して MongoDB を有効にします。
namespace App\Models; use Laravel\Sanctum\PersonalAccessToken as SanctumToken; use MongoDB\Laravel\Eloquent\DocumentModel; class PersonalAccessToken extends SanctumToken { use DocumentModel; protected $connection = 'mongodb'; protected $table = 'personal_access_tokens'; protected $keyType = 'string'; }
次に、次のコマンドを実行して、データベース スキーマを変更します。
php artisan migrate
アプリケーションのサービス プロバイダーのいずれかでusePersonalAccessTokenModel()
メソッドを呼び出すことで、SAN にカスタムPersonalAccessToken
モデルの使用を指示できるようになりました。 詳細については、「 デフォルト モデルの上書き 」を参照してください Lambda ガイドを参照してください。
Tip
DocumentModel
特権の詳細については、Eloquet モデル クラス ガイドのサードパーティ モデル クラスの拡張を参照してください。
Lambda パスポート
Lambda パスポートは、Lambel アプリケーションの API 認証を提供する OAuth 2.0サーバー実装です。 アプリケーションで OAuth 2のサポートが必要な場合は、Lambda を使用します。
Tip
Lambda パスポートと OAuth 2.0プロトコルの詳細については、次のリソースを参照してください。
Lambda パスポート Lambda のドキュメント。
OAuth2.0 (OAuth ウェブサイト)。
Lambel パスポートのインストール
Lambda Passport をインストールし、OAuth 2クライアントを保存するために必要なデータベース移行を実行するには、プロジェクト ルートから次のコマンドを実行します。
php artisan install:api --passport
次に、 User
モデルに移動し、 Laravel\Passport\HasApiTokens
特性を追加します。 この特権は、ユーザーの認証トークンとスコープを検査できるヘルパー メソッドを提供します。 次のコードは、 app\Models\User.php
ファイルにLaravel\Passport\HasApiTokens
を追加する方法を示しています。
namespace App\Models; use MongoDB\Laravel\Auth\User as Authenticatable; use Laravel\Passport\HasApiTokens; class User extends Authenticatable { use HasApiTokens; ... }
次に、 config\auth.php
ファイルでapi
認証保護を定義し、 driver
オプションをpassport
に設定します。 これは、API リクエストを認証するために Laravelpass のTokenGuard
クラスを使用するようにアプリケーションに指示します。 次の例では、 guards
配列にapi
認証保護を追加します。
'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'passport', 'provider' => 'users', ], ],
Lambel MongoDB で Lambda Perl パスポートを使用
Laravelpassport をインストールした後、対応するpassport モデルを拡張するカスタム Lambda 統合モデルを定義して、MongoDB とのpassport 互換性を有効にする必要があります。 各passport モデル クラスを拡張するには、カスタムモデルにDocumentModel
トランザクションを含めます。 次の Lambda 統合モデル クラスを定義できます。
MongoDB\Laravel\Passport\AuthCode
は、 を拡張しますLaravel\Passport\AuthCode
MongoDB\Laravel\Passport\Client
は、 を拡張しますLaravel\Passport\Client
MongoDB\Laravel\Passport\PersonalAccessClient
は、 を拡張しますLaravel\Passport\PersonalAccessClient
MongoDB\Laravel\Passport\RefreshToken
は、 を拡張しますLaravel\Passport\RefreshToken
MongoDB\Laravel\Passport\Token
は、 を拡張しますLaravel\Passport\Token
次のサンプル コードでは、 MongoDB\Laravel\Passport\AuthCode
クラスの定義時にデフォルトのLaravel\Passport\AuthCode
モデル クラスを拡張し、 DocumentModel
特権を含めています。
class MongoDB\Laravel\Passport\AuthCode extends Laravel\Passport\AuthCode { use MongoDB\Laravel\Eloquent\DocumentModel; protected $primaryKey = '_id'; protected $keyType = 'string'; }
各Laravel\Passport
クラスを拡張するカスタムモデルを定義した後、アプリケーションのApp\Providers\AppServiceProvider
クラスのboot()
メソッドのモデルを使用するようにpassport に指示します。 次の例では、各カスタムモデルをboot()
メソッドに追加します。
namespace App\Providers; use Illuminate\Support\ServiceProvider; use MongoDB\Laravel\Passport\AuthCode; use MongoDB\Laravel\Passport\Client; use MongoDB\Laravel\Passport\PersonalAccessClient; use MongoDB\Laravel\Passport\RefreshToken; use MongoDB\Laravel\Passport\Token; class AppServiceProvider extends ServiceProvider { /** * Register any application services. */ public function register(): void { } /** * Bootstrap any application services. */ public function boot(): void { Passport::useAuthCodeModel(AuthCode::class); Passport::useClientModel(Client::class); Passport::usePersonalAccessClientModel(PersonalAccessClient::class); Passport::useRefreshTokenModel(RefreshToken::class); Passport::useTokenModel(Token::class); } }
その後、アプリケーションで Lambda Passport と MongoDB を使用できるようになります。
パスワードの通知
MongoDB ベースのパスワード通知のサポートを追加するには、アプリケーションに次のサービス プロバイダーを登録します。
MongoDB\Laravel\Auth\PasswordResetServiceProvider::class
このサービス プロバイダーは、内部DatabaseReminderRepository
を変更してパスワード 通知を有効にします。
例
次のコードでは、Lambel アプリケーションのbootstrap
ディレクトリにあるproviders.php
ファイルを更新して、 PasswordResetServiceProvider
プロバイダーを登録します。
return [ App\Providers\AppServiceProvider::class, MongoDB\Laravel\MongoDBServiceProvider::class, MongoDB\Laravel\Auth\PasswordResetServiceProvider::class ];
詳細情報
ユーザー認証の詳細については、「 認証 」を参照してください。 Lambda のドキュメント。
効率モデルの詳細については、 効率モデルクラスのガイドを参照してください。