ユーザ認証


はじめに

    データベースに関する考慮事項
  • ルーティング
  • #表示
    • 認証
    • 取得された認証済みユーザー
    • パス保護
    • ログイン制限
    • ユーザーの手動確認
    ユーザーを記憶する
  • その他の認証方法
  • ログアウト
    • #他のデバイスの無効なセッション
  • #ソーシャル認証
  • #カスタム保護を追加
    • リクエスト保護をオフにする
  • カスタム ユーザー プロバイダーの追加
  • ##ユーザー プロバイダー契約
    • #認定可能な契約## ############イベント################# ##########

      はじめに

      {ヒント} すぐに始めたいですか? 新しい Laravel アプリケーションで phpArtisanmake:authphpArtisan Migrate を実行するだけです。次に、ブラウザで http://your-app.test/register またはアプリケーションに割り当てられたその他の URL に移動します。これら 2 つのコマンドは、認証システム全体の構築を担当します。

      Laravel を使用すると、認証の実装が非常に簡単になります。実際、ほとんどすべての構成が既製です。認証構成ファイルは config/auth.php にあり、認証サービスの動作を調整するための十分に文書化されたオプションがいくつか含まれています。

      Laravel の認証機能の中核は、「ガード」と「プロバイダー」で構成されています。ガードは、リクエストごとにユーザーを認証する方法を決定します。たとえば、Laravel には、セッション ストレージと Cookie を使用して状態を維持する session 保護が付属しています。

      プロバイダーは、永続ストレージからユーザーを取得する方法を決定します。 Laravel は、Eloquent とデータベース クエリ ビルダーを使用したユーザーの取得をサポートしています。ただし、アプリケーションのニーズに基づいて他のプロバイダーを自由に定義できます。

      これがわかりにくいと思われても、心配しないでください。多くのアプリケーションでは、デフォルトの認証構成を変更する必要はありません。

      データベースに関する注意事項

      デフォルトでは、Laravel には App\User Eloquent モデルが含まれています。 app ディレクトリ内。このモデルは、デフォルトの Eloquent 認証ドライバーで使用できます。アプリケーションが Eloquent を使用しない場合は、Laravel クエリ ビルダーを使用する database 認証ドライバーを使用できます。

      App\User モデルのデータベース スキーマを生成するときは、パスワードの長さが少なくとも 60 文字であることを確認してください。デフォルトの文字列長の 255 文字をそのまま使用することをお勧めします。

      さらに、「users」(または同等の) テーブルに、NULL 許容の 100 文字の remember_token 文字列が含まれていることを確認する必要があります。この列は、ユーザーがアプリケーションにログインするときに「記憶する」オプションを選択したときにトークンを保存するために使用されます。

      ユーザー認証のクイックガイド

      Laravel には、App に事前に構築された認証コントローラーがいくつか付属しています。 \Http\Controllers\Auth 名前空間。 RegisterController は新規ユーザー登録を処理し、LoginController は認証を処理し、ForgotPasswordController はパスワードをリセットするための電子メール リンクを処理し、ResetPasswordController にはパスワードをリセットするロジックが含まれています。これらの各コントローラーは、属性を使用して必要なメソッドを含めます。多くのアプリケーションでは、これらのコントローラーを変更する必要はまったくありません。

      Routing

      Laravel は、簡単なコマンドを使用して、認証に必要なすべてのルートとビューを簡単に設定する方法を提供します:

      php artisan make:auth

      このコマンドは、新しいアプリケーション プログラムに使用する必要があり、インストールされます。レイアウト ビュー、登録およびログイン ビュー、およびすべての認証エンドポイントのルート。アプリケーション ダッシュボードへのログイン後のリクエストを処理するために、HomeController も生成されます。

      {ヒント} アプリケーションに登録が必要ない場合は、新しく作成した RegisterController を削除し、ルート宣言を変更することで登録を無効にできます。 Auth::routes( ['登録' => false]);

      View

      前のセクションで説明したように、php 職人 make:auth このコマンドは、認証に必要なすべてのビューを作成し、resources/views/auth ディレクトリに配置します。

      make:auth コマンドは、アプリケーションの基本レイアウトを含む resources/views/layouts ディレクトリも作成します。これらのビューはすべて Bootstrap CSS フレームワークを使用しますが、自由にカスタマイズできます。

      認証コントローラのルーティングとビューが設定されたので、登録とビューを実行できます。新規ユーザーを認証します!コントローラーには、ユーザーの存在を確認し、ユーザーをデータベースに保存するための認証ロジック (特性を通じて実装) がデフォルトですでに組み込まれているため、ブラウザーでアプリケーションにアクセスできるようになります。

      カスタム パス

      ユーザーが認証に成功すると、URI

      /home

      にリダイレクトされます。 LoginControllerRegisterControllerResetPasswordController、および VerificationController コントローラーで redirectTo プロパティを定義することでカスタマイズできます。認証されたリダイレクトの場所:

      protected $redirectTo = '/';
      次に、ユーザー URI をリダイレクトするときに新しい場所にリダイレクトするように、

      RedirectIfAuthenticated

      ミドルウェアの handle メソッドを変更する必要があります。 リダイレクト パスにカスタム生成ロジックが必要な場合は、

      redirectTo

      属性の代わりに redirectTo メソッドを定義できます:

      protected function redirectTo(){ 
         return '/path';
       }

      { Tip} redirectTo メソッドは redirectTo 属性より優先されます。

      カスタムユーザー名

      Laravel はデフォルトで認証に

      email

      フィールドを使用します。他のフィールドを使用する場合は、LoginController コントローラーで username メソッドを定義できます:

      public function username(){  
        return 'username';
       }

      カスタマイズされたウォッチャー

      ユーザー認証と登録のための「ウォッチャー」をカスタマイズすることもできます。この機能を実装するには、guard メソッドを LoginControllerRegisterController、および ResetPasswordController で定義する必要があります。このメソッドはガード インスタンスを返します:

      use Illuminate\Support\Facades\Auth;protected function guard(){ 
         return Auth::guard('guard-name');
       }

      カスタム検証/ストレージ

      新規ユーザーが登録時に入力する必要があるフォーム フィールドを変更するため、またはカスタマイズするため新しいユーザーをデータベースに保存する方法は、RegisterController クラスを変更できます。このクラスは、新しいユーザーの検証と作成を担当します。

      RegisterController クラスの validator メソッドには、新しいユーザーを検証するためのルールが含まれています。このメソッドは必要に応じてカスタマイズできます。

      RegisterControllercreate メソッドは、Eloquent ORM を使用してデータベースに新しい App\User レコードを作成します。データベースのニーズに応じてこのメソッドをカスタマイズできます。

      認証されたユーザーの取得

      Auth ファサードを通じて認証されたユーザーにアクセスできます:

      use Illuminate\Support\Facades\Auth;
      // 获取当前通过认证的用户...
      $user = Auth::user();
      // 获取当前通过认证的用户 ID...
      $id = Auth::id();

      または、Illuminate\Http\Request インスタンスを通じて認証されたユーザーにアクセスできます。忘れないでください。タイプヒント付きクラスはコントローラー メソッドに自動的に挿入されます。

      <?php
         namespace App\Http\Controllers;
         use Illuminate\Http\Request;
         class ProfileController extends Controller{ 
          /**
           * 更新用户资料。
           *
           * @param  Request  $request
           * @return Response
           */  
         public function update(Request $request)  
           {       
            // $request->user() 返回一个认证用户实例...   
            }
        }

      現在のユーザーが認証されているかどうかを確認するには、次のように使用できます。 ## ユーザーが認証されているかどうかを確認する #Auth

      ファサードの

      check メソッド。認証された場合は、true が返されます。

      use Illuminate\Support\Facades\Auth;
      if (Auth::check()) {   
       // 用户已经登录了...
      }
      {ヒント}

      check
      メソッドを使用してユーザーが認証されているかどうかを確認できますが、ユーザー一部のルート/コントローラーの前では、ユーザーが認証されていることを確認するためにミドルウェアを使用するのが依然として一般的です。詳細については、保護されたルーティングに関するドキュメントを参照してください。

      ルーティングの保護
      ルーティング ミドルウェアを使用すると、認証されたユーザーのみに特定のルーティングへのアクセスを許可できます。 。 Laravel には

      auth

      ミドルウェアが付属しており、これは

      Illuminate\Auth\Middleware\Authenticate で定義されています。このミドルウェアはすでに HTTP カーネルに登録されているため、このミドルウェアをルート定義にアタッチするだけで済みます。

      Route::get('profile', function () {  
        // 只有认证过的用户可以进入...
       })->middleware('auth');
      もちろん、コントローラーを使用する場合は、コントローラーのコンストラクターで呼び出すことができます middleware

      ルート定義に直接追加する方法:

      public function __construct(){  
        $this->middleware('auth');
      }

      未認証ユーザーのリダイレクト

      auth ミドルウェアが未認証ユーザーを検出すると、そのユーザーを名前付きルート上の login という名前のディレクトリにリダイレクトします。
      この動作は、app/Http/Middleware/Authenticate.php ファイルの redirectTo 関数を変更することで変更できます:

      /**
       * Get the path the user should be redirected to.
       *
       * @param  \Illuminate\Http\Request  $request
       * @return string
       */
       protected function redirectTo($request){ 
          return route('login');
       }
      # #ウォッチャーの指定

      auth ミドルウェアをルートに追加するときに、ユーザー認証に使用するウォッチャーを指定することもできます。指定されたガードは、auth.php 構成ファイルの guards 配列のキーに対応する必要があります:

      public function __construct(){ 
         $this->middleware('auth:api');
      }

      ##ログイン調整

      Laravel の組み込み

      LoginController

      クラスを使用する場合、Illuminate\Foundation\Auth\ThrottlesLogins トレイトはすでに含まれていますコントロール デバイスがヒットしました。デフォルトでは、ユーザーが複数回試行しても正しいログイン資格情報の入力に失敗した場合、ユーザーは 1 分間再ログインを試行できなくなります。この調整ポリシーは、ユーザーのユーザー名/電子メール アドレスおよび IP アドレスの一意性に基づいています。

      ユーザーの手動認証

      Lavarel では認証コントローラーを使用する必要はありません。これらのコントローラーを削除することを選択した場合は、Lavarel 検証クラスを直接使用する必要があります。心配しないでください、それは簡単です!

      #Auth

      ファサードを使用して Laravel サービスにアクセスできるため、クラスの先頭で

      Auth をインポートする必要があります。 attempt メソッドを見てみましょう:

      <?php
          namespace App\Http\Controllers;
          use Illuminate\Http\Request;
          use Illuminate\Support\Facades\Auth;
          class LoginController extends Controller{  
           /**
           * 处理身份验证尝试。
           *
           * @param  \Illuminate\Http\Request $request
           *
           * @return Response
           */   
          public function authenticate(Request $request)   
           {       
              $credentials = $request->only('email', 'password');      
              if (Auth::attempt($credentials)) {        
                  // 身份验证通过...           
                 return redirect()->intended('dashboard');    
                   }   
                 }
              }
      attempt

      メソッドの各パラメーターは連想配列です。配列値は、データベース内でユーザーを検索するために使用されます。上の例では、ユーザーは

      email 列の値によって検索されます。ユーザーが見つかった場合は、データベースに保存されているハッシュ化されたパスワードが配列内の password 値と比較されます。 password をハッシュする必要はありません。フレームワークは、データベース内のハッシュされたパスワードと比較する前に、この値を自動的にハッシュします。 2 つのハッシュが一致する場合、ユーザーに対して認証されたセッションが確立されます。 検証が成功した場合、attempt

      メソッドは

      true を返し、そうでない場合は false を返します。 リダイレクトの intended

      メソッドは、認証ミドルウェアを介して認証前にインターセプトされた URL にユーザーをリダイレクトします。予期したターゲットが存在しない場合は、このメソッドのフォールバック URI を指定できます。

      追加の条件を指定する
      ユーザーの電子メールとパスワードに加えて、認証クエリに追加の条件を追加できます。たとえば、ユーザーが「アクティブ化」としてマークされていることを確認できます。

      if (Auth::attempt(['email' => $email, 'password' => $password, 'active' => 1])) {  
        // 用户存在,已激活且未被禁用。
       }

      {note} これらの例では、

      email
      は必須のオプションではありません。デモンストレーションを使用しました。データベースの「ユーザー名」に対応する列名を使用する必要があります。

      指定されたガード インスタンスにアクセスする

      Auth ファサードの guard メソッドを使用して、使用するガード インスタンスを指定できます。これにより、完全に独立した検証可能なモデルまたはユーザー テーブルを使用して、アプリケーションのさまざまな部分の検証を管理できるようになります。

      guard メソッドに渡されるガード名は、auth.php 構成内の構成項目の 1 つと一致する必要があります:

      if (Auth::guard('admin')->attempt($credentials)) { 
         //
       }

      Logout

      ユーザーは、Auth ファサードの logout メソッドを使用してログアウトする必要があります。ユーザー セッションのユーザー認証情報をクリアします。

      Auth::logout();

      ユーザーを記憶する

      必要な場合は、アプリケーションに「remember me」機能を提供する場合、ブール値を attempt メソッドの 2 番目のパラメータとして渡すことができます。これにより、ユーザーが手動でログアウトするまで無期限にユーザーの認証が維持されます。ユーザー テーブルには、トークンを保存するための文字列型の remember_token 列が含まれている必要があります。

      if (Auth::attempt(['email' => $email, 'password' => $password], $remember)) { 
         // 用户被记住...
      }

      {tip} Laravel の組み込み LoginController を使用する場合、ユーザーを「記憶」するための正しいロジックは、コントローラーで使用されるトレイトによってすでに実装されています。

      「ユーザーを記憶」が有効になっている場合は、viaRemember メソッドを使用して、「ユーザーを記憶」Cookie がユーザーの認証に使用されるかどうかを判断できます:

      if (Auth::viaRemember()) { 
         //
      }

      その他の認証方法

      ユーザー インスタンスを確認する

      既存 アプリケーションにログインするには、ユーザー インスタンスをパラメータとして login メソッドを呼び出すことができます。オブジェクトは、Illuminate\Contracts\Auth\Authenticatable コントラクトを実装する必要があります。 Laravel に付属する App\User モデルは、このインターフェイスを実装しています:

      Auth::login($user);
      // 登录并「记住」给定的用户...
      Auth::login($user, true);

      次のメソッドを使用して、目的のガード インスタンスを指定します:

      Auth::guard('admin')->login($user);
      # #ID によるユーザー ID の確認

      loginUsingId メソッドを使用して、ID によってユーザーをアプリケーションにログインできます。このメソッドは、ID を認証するユーザーの主キーを受け入れます:

      Auth::loginUsingId(1);
      // 登录并「记住」给定用户...
      Auth::loginUsingId(1, true);

      ユーザーの ID を 1 回だけ認証します

      once# を使用できます。 ## 単一のリクエストでユーザーを認証するメソッド ユーザーはアプリケーションにログインします。これにより、セッションや Cookie は使用されなくなります。つまり、このメソッドはステートレス API の構築に役立ちます:

      if (Auth::once($credentials)) {
          //
        }

      HTTP 基本認証

      HTTP 基本認証 専用の「ログイン」ページを設定せずに、アプリケーションでユーザーを認証する簡単な方法を提供します。始める前に、auth.basic ミドルウェアをルートにアタッチします。 auth.basic ミドルウェアはすでに Laravel フレームワークに含まれているため、定義する必要はありません:

      Route::get('profile', function () { 
         // 只有认证过的用户可以进入...
       })->middleware('auth.basic');

      ミドルウェアをルートにアタッチすると、自動的にプロンプ​​トが表示されます。資格情報用。デフォルトでは、auth.basic ミドルウェアは、ユーザー レコードの email フィールドを「ユーザー名」として使用します。

      FastCGI に関する注意事項

      PHP FastCGI モードを使用している場合、HTTP 基本認証が正しく機能しない可能性があります。 .htaccess ファイルに次の行を追加する必要があります:

      RewriteCond %{HTTP:Authorization} ^(.+)$
      RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

      #Stateless HTTP Basic Authentication

      セッションでユーザー識別子 Cookie を設定せずに HTTP 基本認証を使用することもできます。これは、API 認証に特に便利です。これを行うには、

      onceBasic メソッドを呼び出すミドルウェアを定義します。 onceBasic メソッドが応答を返さない場合は、リクエストをさらにアプリケーションに渡すことができます:

      <?php
        namespace App\Http\Middleware;
        use Illuminate\Support\Facades\Auth;
        class AuthenticateOnceWithBasicAuth{   
             /**
           * 处理传入的请求
           *
           * @param  \Illuminate\Http\Request  $request
           * @param  \Closure  $next
           * @return mixed
           */  
        public function handle($request, $next)  
          {       
             return Auth::onceBasic() ?: $next($request);  
           }
         }

      次に、ルーティング ミドルウェアが登録され、ルートにアタッチされます:

      Route::get('api/user', function () {  
        // 只有认证过的用户可以进入...
      })->middleware('auth.basic.once');

      Logout

      ユーザーをアプリケーションから手動でログアウトするには、

      Auth

      ファサードを使用できます。 ログアウトメソッド。これにより、ユーザーのセッションの認証情報がクリアされます:

      use Illuminate\Support\Facades\Auth;Auth::logout();

      他のデバイス上のセッションを無効にする

      Laravel A現在のデバイス上のセッションを無効にすることなく、他のデバイス上のユーザー セッションを無効にして「ログオフ」するためのメカニズムも提供されています。まず、

      Illuminate\Session\Middleware\AuthenticateSession

      ミドルウェアが、app/Http/Kernel.php クラスの web ミドルウェア グループにあることを確認する必要があります。

      'web' => [   
          // ...
          \Illuminate\Session\Middleware\AuthenticateSession::class,  
          // ...
        ],
      これで、

      Auth

      ファサードで logoutOtherDevices メソッドを使用できるようになります。このメソッドでは、ユーザーは現在のパスワードを入力する必要があります。アプリケーションは入力フォームを通じてこのパスワードを受け入れる必要があります。

      use Illuminate\Support\Facades\Auth;
      Auth::logoutOtherDevices($password);

      {note}
      logoutOtherDevices

      メソッドが呼び出されるとき、ユーザーの他のパスワードセッションは完全に無効になります。これは、以前に認証されていたすべてのウォッチャーを「終了」することを意味します。

      #

      カスタム ガードの追加

      Auth ファサードの extend メソッドを使用して、独自の認証ガードを定義できます。サービスプロバイダーで extend メソッドを呼び出す必要があります。 Laravel にはすでに AuthServiceProvider が付属しているため、そのプロバイダーにコードを置くことができます:

      <?php
        namespace App\Providers;
        use App\Services\Auth\JwtGuard;
        use Illuminate\Support\Facades\Auth;
        use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
        class AuthServiceProvider extends ServiceProvider{   
            /**
           * 注册任意应用认证/授权服务。
           *
           * @return void
           */   
        public function boot()  
         {      
           $this->registerPolicies();        
           Auth::extend('jwt', function ($app, $name, array $config) {         
             // 返回一个 Illuminate\Contracts\Auth\Guard 实例...           
              return new JwtGuard(Auth::createUserProvider($config['provider']));     
               });   
          }}

      上の例でわかるように、extend のコールバックを渡します。このメソッドは、Illuminate\Contracts\Auth\Guard インターフェイスを実装するインスタンスを返す必要があります。このインターフェイスには、カスタム ウォッチャーに実装する必要があるメソッドがいくつか含まれています。カスタム ガードを定義したら、auth.php 構成ファイルの guards 構成でこのガードを使用できます:

      'guards' => [  
        'api' => [     
           'driver' => 'jwt',        
           'provider' => 'users',    
           ],
        ],

      Request Closure Guard

      HTTP リクエストに基づいてカスタム認証システムを実装する最も簡単な方法は、Auth::viaRequest メソッドを使用することです。このメソッドを使用すると、単一のクロージャを使用して認証プロセスを迅速に定義できます。

      まず、AuthServiceProviderboot メソッドで Auth::viaRequest メソッドを呼び出します。 viaRequest このメソッドは、最初のパラメータとしてガード名を受け取ります。この名前には、カスタム ウォッチャーを説明する任意の文字列を指定できます。このメソッドに渡される 2 番目の引数は、受信 HTTP リクエストを受信して​​ユーザー インスタンスを返すクロージャ関数である必要があります。検証が失敗した場合は null を返します。

      use App\User;
      use Illuminate\Http\Request;
      use Illuminate\Support\Facades\Auth;
        /**
       * 注册任意应用认证/授权服务。
       *
       * @return void
       */
       public function boot(){  
         $this->registerPolicies();  
          Auth::viaRequest('custom-token', function ($request) {     
             return User::where('token', $request->token)->first();  
             });
           }

      ガードのカスタマイズが完了したとき、auth.php 設定ファイルの guards 設定でこのガードを使用できます:

      'guards' => [   
       'api' => [      
         'driver' => 'custom-token',  
         ],
       ],

      #カスタム ユーザー プロバイダーの追加

      ##従来のリレーショナル データベースを使用してユーザーを保存していない場合は、独自の認証ユーザー プロバイダーを使用して Lavarel を拡張する必要があります。

      Auth

      ファサードの provider メソッドを使用してユーザー プロバイダーをカスタマイズできます。

      <?php
          namespace App\Providers;
          use Illuminate\Support\Facades\Auth;
          use App\Extensions\RiakUserProvider;
          use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
          class AuthServiceProvider extends ServiceProvider{   
              /**
           * 注册任意应用身份验证 / 授权服务Register any application authentication / authorization services.
           *
           * @return void
           */   
            public function boot()   
             {      
               $this->registerPolicies();       
               Auth::provider('riak', function ($app, array $config) {         
                  // 返回 Illuminate\Contracts\Auth\UserProvider 实例...            
                  return new RiakUserProvider($app->make('riak.connection'));       
                 });   
              }}

      provider

      メソッドを使用して登録すると、 auth.php 構成ファイルで新しいユーザープロバイダーに切り替えます。まず、新しいドライバーを使用する provider を定義します:

      'providers' => [  
        'users' => [      
          'driver' => 'riak',  
            ],
        ],
      次に、このプロバイダーを

      guards

      構成で使用できます:

      'guards' => [   
          'web' => [     
             'driver' => 'session',        
             'provider' => 'users',    
           ],
        ],

      ユーザー プロバイダー コントラクト

      Illuminate\Contracts\Auth\UserProvider 実装は、MySQL、Riak などの永続ストレージ システムからの抽出のみを担当します。 Illuminate\Contracts \Auth\Authenticatable を達成します。これら 2 つのインターフェイスにより、ユーザーがどのように保存されているか、ユーザーを表すためにどのようなクラスが使用されているかに関係なく、Laravel の認証メカニズムが機能し続けることができます:

      見てみましょうIlluminate\Contracts\Auth\UserProvider 契約:

      <?php
          namespace Illuminate\Contracts\Auth;
          interface UserProvider {  
            public function retrieveById($identifier);    
            public function retrieveByToken($identifier, $token);    
            public function updateRememberToken(Authenticatable $user, $token);    
            public function retrieveByCredentials(array $credentials);    
            public function validateCredentials(Authenticatable $user, array $credentials);
           }

      retrieveById この関数は通常、クラスを表すために使用されるキー (MySQL データベースで自動的にインクリメントされる ID など) をパラメータとして受け取り、 # を取得して返します。 # この ID に一致する #Authenticatable 実装。

      retrieveByToken 関数は、一意の $identifierremember_token 列に格納されている「remember me」トークンを使用してユーザーを取得します。前のメソッドと同様に、Authenticatable 実装を返します。

      updateRememberToken メソッドは、$userremember_token 列を新しい $token で更新します。 「リフレッシュトークン」は、「Remember Me」ログイン認証が成功したとき、またはユーザーがログアウトしたときに割り当てられます。

      retrieveByCredentials メソッドは、アプリケーションへのログインを試行するときに Auth::attempt メソッドに渡される資格情報の配列を受け入れます。このメソッドは、これらの資格情報と一致するユーザーについて、基礎となる永続ストアを「クエリ」します。通常、このメソッドは $credentials['username'] に基づいて「where」条件を実行し、Authenticatable 実装を返す必要があります。 このメソッドでは、パスワードの検証や認証は行われません。

      validateCredentials メソッドは、指定された $user$credentials を比較して、ユーザーの ID を検証する必要があります。たとえば、このメソッドはおそらく Hash::check を使用して、$user->getAuthPassword() の値と $credentials['password'] の値を比較する必要があります。 ### 価値。ユーザーのパスワードが有効かどうかを示すために、true または false を返す必要があります。

      認証コントラクト

      UserProviderの各メソッドを詳しく解説しました。 Authenticatable コントラクトを見てみましょう。ユーザー プロバイダーの retrieveByIdretrieveByToken、および retrieveByCredentials メソッドは、このインターフェイスのインスタンスを返すことに注意してください。

      <?php
         namespace Illuminate\Contracts\Auth;
         interface Authenticatable {   
            public function getAuthIdentifierName();    
            public function getAuthIdentifier();    
            public function getAuthPassword();    
            public function getRememberToken();    
            public function setRememberToken($value);    
            public function getRememberTokenName();
           }

      このインターフェイスは単純です。 getAuthIdentifierName メソッドはユーザーの「主キー」列の名前を返し、getAuthIdentifier メソッドはユーザーの「主キー」を返す必要があります。 MySQL バックエンドでは、これは自動インクリメントされる主キーになります。 getAuthPassword このメソッドはユーザーのハッシュ化されたパスワードを返す必要があります。このインターフェイスにより、どの ORM または抽象化ストレージ層が使用されているかに関係なく、認証システムが常に任意の User クラスと連携できるようになります。デフォルトでは、Laravel の app ディレクトリに、このインターフェイスを実装する User クラスが含まれるため、この実装例を参考にしてください。

      イベント

      Laravel は認証プロセス中にさまざまなイベントを発生させます。これらのイベントのリスナーは、EventServiceProvider:

      /**
       * 应用的事件监听器映射。
       *
       * @var array
       */
       protected $listen = [   
          'Illuminate\Auth\Events\Registered' => [     
             'App\Listeners\LogRegisteredUser',  
             ],  
           'Illuminate\Auth\Events\Attempting' => [     
              'App\Listeners\LogAuthenticationAttempt', 
               ],  
            'Illuminate\Auth\Events\Authenticated' => [    
               'App\Listeners\LogAuthenticated',   
              ],  
            'Illuminate\Auth\Events\Login' => [     
               'App\Listeners\LogSuccessfulLogin',   
              ],  
            'Illuminate\Auth\Events\Failed' => [     
               'App\Listeners\LogFailedLogin',   
              ], 
            'Illuminate\Auth\Events\Logout' => [      
                 'App\Listeners\LogSuccessfulLogout',  
                 ],   
             'Illuminate\Auth\Events\Lockout' => [     
               'App\Listeners\LogLockout',   
               ],  
             'Illuminate\Auth\Events\PasswordReset' => [     
               'App\Listeners\LogPasswordReset',   
               ],
            ];
      に接続できます。この記事は、LearnKu.com Web サイトで最初に公開されました。