Docs Menu
Docs Home
/ / /
Lambda MongoDB

ユーザー認証

項目一覧

  • Overview
  • ユーザーモデルの変更
  • ユーザー コントロールの作成
  • ユーザー認証をカスタマイズする
  • Lambda Triggers
  • Lambda パスポート
  • パスワードの通知
  • 詳細情報

このガイドでは、Lambel のネイティブ認証機能を使用して MongoDB ユーザーを認証する方法を学習できます。

LambdaAuth は、ユーザーの認証方法を定義する監視方法や、ユーザーの検索方法を定義するプロバイダーなどの認証サービスを含むネイティブ モジュールを提供しています。これらのサービスの詳細については、「 認証 」を参照してください。 Lambda のドキュメント。

デフォルトでは、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ファイルを示しています。

<?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.phplogin()logout()

<?php
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 は、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 を有効にします。

<?php
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 $primaryKey = '_id';
protected $keyType = 'string';
}

次に、次のコマンドを実行して、データベース スキーマを変更します。

php artisan migrate

アプリケーションのサービス プロバイダーのいずれかでusePersonalAccessTokenModel()メソッドを呼び出すことで、SAN にカスタムPersonalAccessTokenモデルの使用を指示できるようになりました。 詳細については、「 デフォルト モデルの上書き 」を参照してください Lambda ガイドを参照してください。

Tip

DocumentModel特権の詳細については、Eloquet モデル クラス ガイドのサードパーティ モデル クラスの拡張を参照してください。

Lambda パスポートは、Lambel アプリケーションの API 認証を提供する OAuth 2.0サーバー実装です。 アプリケーションで OAuth 2のサポートが必要な場合は、Lambda を使用します。

Tip

Lambda パスポートと OAuth 2.0プロトコルの詳細については、次のリソースを参照してください。

Lambda Passport をインストールし、OAuth 2クライアントを保存するために必要なデータベース移行を実行するには、プロジェクト ルートから次のコマンドを実行します。

php artisan install:api --passport

次に、 Userモデルに移動し、 Laravel\Passport\HasApiTokens特性を追加します。 この特権は、ユーザーの認証トークンとスコープを検査できるヘルパー メソッドを提供します。 次のコードは、 app\Models\User.phpファイルにLaravel\Passport\HasApiTokensを追加する方法を示しています。

<?php
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',
],
],

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()メソッドに追加します。

<?php
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 のドキュメント。

効率モデルの詳細については、 効率モデルクラスのガイドを参照してください。

戻る

クエリ ビルダ