ホームページ バックエンド開発 PHPチュートリアル Laravel 認証原理の PHP 例と完全にカスタマイズされた認証の詳細な説明

Laravel 認証原理の PHP 例と完全にカスタマイズされた認証の詳細な説明

Jul 12, 2018 pm 02:28 PM
laravel

最近laravelフレームワークを勉強しているので、次の記事ではLaravelの認証原理と完全にカスタマイズされた認証についての関連情報を中心に、サンプルコードを交えて詳しく紹介していますので、必要な方は参考にしてください。以下はエディターと一緒に学ぼう

まえがき

Laravelのデフォルトの認証機能はすでに非常に包括的ですが、よく遭遇します。ユーザー名と電子メール認証を同時に満たす必要があるなど、検証フィールドがデフォルトのものと一致しないなど、カスタマイズが必要な状況があります。完全にカスタムの証明書を作成するにはどうすればよいですか?チュートリアルではなく、自分で簡単に変更したりカスタマイズしたりできるように、動作原理を紹介することを好みます。

Authenticatable インターフェイス

Illuminate\Contracts\Auth\Authenticatable

Authenticatable は、認証に使用できるモデルを定義します。またはクラスが実装する必要があるインターフェイス。つまり、認証にカスタム クラスを使用する必要がある場合は、このインターフェイスで定義されたメソッドを実装する必要があります。

// 获取唯一标识的,可以用来认证的字段名,比如 id,uuid
public function getAuthIdentifierName();
// 获取该标示符对应的值
public function getAuthIdentifier();
// 获取认证的密码
public function getAuthPassword();
// 获取remember token
public function getRememberToken();
// 设置 remember token
public function setRememberToken($value);
// 获取 remember token 对应的字段名,比如默认的 'remember_token'
public function getRememberTokenName();
ログイン後にコピー

たとえば、認証モデルでは、パスワード検証として「パスワード」ではなく「トークン」を使用する必要があります。このとき、戻り値を変更できます。 getAuthPassword() メソッド。値は 'token';

Authenticatable trait

Illuminate\Auth\Authenticatable

Authenticatable trait Laravelで定義されているのは、デフォルトのUserモデルで使用されるLaravel auth Traitでもあり、このトレイトはUserモデルのデフォルトの認証識別子を「id」、パスワードフィールドを「password」、記憶トークンに対応するフィールドをremember_tokenとして定義します。すぐ。

一部の設定は、User モデルのこれらのメソッドをオーバーライドすることで変更できます。

Guard インターフェイス

Illuminate\Contracts\Auth\Guard

Guard インターフェイスは、Authenticatable (認証可能) を実装する実装を定義します。 ) モデルまたはクラスの認証メソッドといくつかの共通インターフェイス。

// 判断当前用户是否登录
public function check();
// 判断当前用户是否是游客(未登录)
public function guest();
// 获取当前认证的用户
public function user();
// 获取当前认证用户的 id,严格来说不一定是 id,应该是上个模型中定义的唯一的字段名
public function id();
// 根据提供的消息认证用户
public function validate(array $credentials = []);
// 设置当前用户
public function setUser(Authenticatable $user);
ログイン後にコピー

StatefulGuard インターフェイス

Illuminate\Contracts\Auth\StatefulGuard

StatefulGuard インターフェイスは、Guard 内部を除き、Guard インターフェイスから継承します。定義されたいくつかの基本的なインターフェイスに加えて、さらにステートフルな Guard も追加されました。

新しく追加されたインターフェイスには次のものが含まれます:

// 尝试根据提供的凭证验证用户是否合法
public function attempt(array $credentials = [], $remember = false);
// 一次性登录,不记录session or cookie
public function once(array $credentials = []);
// 登录用户,通常在验证成功后记录 session 和 cookie 
public function login(Authenticatable $user, $remember = false);
// 使用用户 id 登录
public function loginUsingId($id, $remember = false);
// 使用用户 ID 登录,但是不记录 session 和 cookie
public function onceUsingId($id);
// 通过 cookie 中的 remember token 自动登录
public function viaRemember();
// 登出
public function logout();
ログイン後にコピー

Laravelデフォルトでは、RequestGuard、TokenGuard、SessionGuard の 3 つのガードが提供されます。

RequestGuard

Illuminate\Auth\RequestGuard

RequestGuard は非常に単純なガードです。 .RequestGuard はクロージャを渡すことによって認証されます。 Auth::viaRequest.

SessionGuard

Illuminate\Auth\SessionGuard

SessionGuard は Laravel Web のデフォルトです。認証ガード。

#TokenGuard#Illuminate\Auth\TokenGuard

TokenGuard は、トークン認証によるステートレス API 認証に適しています。

UserProvider インターフェイスIlluminate\Contracts\Auth\UserProvider

UserProvider インターフェイスは、認証モデルを取得する方法 (モデル ベースの取得など) を定義します。 ID に基づいて、電子メールに基づいてモデルを取得するなど。

// 通过唯一标示符获取认证模型
public function retrieveById($identifier);
// 通过唯一标示符和 remember token 获取模型
public function retrieveByToken($identifier, $token);
// 通过给定的认证模型更新 remember token
public function updateRememberToken(Authenticatable $user, $token);
// 通过给定的凭证获取用户,比如 email 或用户名等等
public function retrieveByCredentials(array $credentials);
// 认证给定的用户和给定的凭证是否符合
public function validateCredentials(Authenticatable $user, array $credentials);
ログイン後にコピー

Laravel にはデフォルトで 2 つのユーザープロバイダーがあります: DatabaseUserProvider と EloquentUserProvider。

DatabaseUserProvider

Illuminate\Auth\DatabaseUserProvider

データベース テーブルから直接認証モデルを取得します。

EloquentUserProvider

Illuminate\Auth \EloquentUserProvider

eloquent モデルを通じて認証モデルを取得する

AuthManager

Illuminate\Auth\AuthManager

Guard はユーザーが認証に成功したかどうかを認証するために使用され、UserProvider は認証モデルのソースを提供するために使用され、ガードの管理やプロジェクトの構成に応じたガードのカスタマイズなどの機能は AuthManager を通じて実装されます。

AuthManager は、ストラテジ パターンの Context クラスとファクトリ メソッドのファクトリに少し似ている必要があります。一方では Guard を管理し、他方では特定のストラテジ (Guard ) メソッドを __call マジック メソッド経由で呼び出します。

Auth ファサードの対応する実装クラスは AuthManager です。AuthManager はコンテナ内にシングルトンとして登録され、すべてのガード、ユーザー プロバイダー、およびガード プロキシの作業を管理するために使用されます。

カスタム認証上記の知識に基づいて、認証をカスタマイズするのは非常に簡単であることがわかります。

#認証モデルの作成
  • #カスタム認証モデルを作成し、Authenticatable インターフェイスを実装します;

# #カスタム UserProvider の作成

  • #カスタム UserProvider を作成し、UserProvider インターフェイスを実装し、上記のカスタム認証モデルを返します。

# カスタム Guard を作成する

  • カスタム Guard を作成し、Guard または StatefulGuard インターフェイスを実装します

    • 添加 guard creator 和 user provider creator 到 AuthManager 中

    在 AppServiceProvider 的 boot 方法添加如下代码:

    Auth::extend('myguard', function(){
     ...
     return new MyGuard(); //返回自定义 guard 实例
     ...
    });
    
    Auth::provider('myuserprovider', function(){
     return new MyUserProvider(); // 返回自定义的 user provider
    });
    ログイン後にコピー

    在 config\auth.php的 guards 数组中添加自定义 guard,一个自定义 guard 包括两部分: driver 和 provider.

    'oustn' => [
     'driver' => 'myguard',
     'provider' => 'myusers',
    ],
    ログイン後にコピー

    在 config\auth.php的 providers 数组中添加自定义 user provider.

    'myusers' => [
     'driver' => 'myuserprovider' // 里面具体的字段可以根据你创建 user provider 需要的信息自由添加,可以通过 Auth::createUserProvider('myuserprovider') 创建
    ],
    ログイン後にコピー

    设置 config\auth.php 的 defaults.guard 为 oustn.

    以上がLaravel 認証原理の PHP 例と完全にカスタマイズされた認証の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHP vs. Flutter: モバイル開発に最適な選択 PHP vs. Flutter: モバイル開発に最適な選択 May 06, 2024 pm 10:45 PM

PHP と Flutter は、モバイル開発でよく使われるテクノロジです。 Flutter は、クロスプラットフォーム機能、パフォーマンス、ユーザー インターフェイスに優れており、高パフォーマンス、クロスプラットフォーム、カスタマイズされた UI を必要とするアプリケーションに適しています。 PHP は、クロスプラットフォームではなく、パフォーマンスが低いサーバー側アプリケーションに適しています。

PHP でオブジェクト リレーショナル マッピング (ORM) を使用してデータベース操作を簡素化するにはどうすればよいですか? PHP でオブジェクト リレーショナル マッピング (ORM) を使用してデータベース操作を簡素化するにはどうすればよいですか? May 07, 2024 am 08:39 AM

PHP でのデータベース操作は、オブジェクトをリレーショナル データベースにマップする ORM を使用して簡素化されます。 Laravel の EloquentORM を使用すると、オブジェクト指向構文を使用してデータベースと対話できます。モデル クラスを定義したり、Eloquent メソッドを使用したり、実際にブログ システムを構築したりすることで ORM を使用できます。

PHP単体テストツールの長所と短所の分析 PHP単体テストツールの長所と短所の分析 May 06, 2024 pm 10:51 PM

PHP 単体テスト ツール分析: PHPUnit: 大規模プロジェクトに適しており、包括的な機能を提供し、インストールが簡単ですが、冗長で遅い場合があります。 PHPUnitWrapper: 小規模プロジェクトに適しており、使いやすく、Lumen/Laravel に最適化されていますが、機能が限られており、コード カバレッジ分析は提供されず、コミュニティ サポートも限られています。

Laravel と CodeIgniter の最新バージョンの比較 Laravel と CodeIgniter の最新バージョンの比較 Jun 05, 2024 pm 05:29 PM

Laravel 9 と CodeIgniter 4 の最新バージョンでは、更新された機能と改善が提供されます。 Laravel9はMVCアーキテクチャを採用しており、データベース移行、認証、テンプレートエンジンなどの機能を提供します。 CodeIgniter4 は、HMVC アーキテクチャを使用してルーティング、ORM、およびキャッシュを提供します。パフォーマンスの面では、Laravel9 のサービスプロバイダーベースの設計パターンと CodeIgniter4 の軽量フレームワークにより、優れたパフォーマンスが得られます。実際のアプリケーションでは、Laravel9 は柔軟性と強力な機能を必要とする複雑なプロジェクトに適しており、CodeIgniter4 は迅速な開発や小規模なアプリケーションに適しています。

Laravel - アーティザンコマンド Laravel - アーティザンコマンド Aug 27, 2024 am 10:51 AM

Laravel - アーティザン コマンド - Laravel 5.7 には、新しいコマンドを処理およびテストするための新しい方法が付属しています。これには職人コマンドをテストする新しい機能が含まれており、そのデモについては以下で説明します。

Laravel と CodeIgniter のデータ処理機能はどのように比較されますか? Laravel と CodeIgniter のデータ処理機能はどのように比較されますか? Jun 01, 2024 pm 01:34 PM

Laravel と CodeIgniter のデータ処理機能を比較します。 ORM: Laravel はクラスとオブジェクトのリレーショナル マッピングを提供する EloquentORM を使用しますが、CodeIgniter は ActiveRecord を使用してデータベース モデルを PHP クラスのサブクラスとして表します。クエリビルダー: Laravel には柔軟なチェーンクエリ API がありますが、CodeIgniter のクエリビルダーはよりシンプルで配列ベースです。データ検証: Laravel はカスタム検証ルールをサポートする Validator クラスを提供しますが、CodeIgniter には組み込みの検証関数が少なく、カスタム ルールの手動コーディングが必要です。実践例:ユーザー登録例はLarを示しています

Laravel と CodeIgniter: 大規模プロジェクトにはどちらのフレームワークが適していますか? Laravel と CodeIgniter: 大規模プロジェクトにはどちらのフレームワークが適していますか? Jun 04, 2024 am 09:09 AM

大規模プロジェクト用のフレームワークを選択する場合、Laravel と CodeIgniter にはそれぞれ独自の利点があります。 Laravel はエンタープライズレベルのアプリケーション向けに設計されており、モジュール設計、依存関係の注入、強力な機能セットを提供します。 CodeIgniter は、速度と使いやすさを重視した、小規模から中規模のプロジェクトに適した軽量フレームワークです。複雑な要件と多数のユーザーを伴う大規模なプロジェクトには、Laravel のパワーとスケーラビリティがより適しています。単純なプロジェクトやリソースが限られている状況では、CodeIgniter の軽量で迅速な開発機能がより理想的です。

PHPコードの単体テストと統合テスト PHPコードの単体テストと統合テスト May 07, 2024 am 08:00 AM

PHP 単体テストおよび統合テスト ガイド 単体テスト: コードまたは関数の単一単位に焦点を当て、PHPUnit を使用して検証用のテスト ケース クラスを作成します。統合テスト: 複数のコードユニットがどのように連携するかに注意し、PHPUnit の setUp() メソッドと TearDown() メソッドを使用してテスト環境をセットアップおよびクリーンアップします。実際のケース: PHPUnit を使用して、データベースの作成、サーバーの起動、テストコードの作成など、Laravel アプリケーションの単体テストと統合テストを実行します。

See all articles