ユーザ認証
- データベースに関する考慮事項
- ルーティング
- #表示ユーザーを記憶する
- その他の認証方法
- ## HTTP 基本認証
- #ステートレス HTTP 基本認証
- ログアウト #ソーシャル認証
- #カスタム保護を追加
- カスタム ユーザー プロバイダーの追加
- ##ユーザー プロバイダー契約
- #認定可能な契約## ############イベント################# ##########
はじめに
{ヒント} すぐに始めたいですか? 新しい Laravel アプリケーションで
phpArtisanmake:auth
とphpArtisan 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にリダイレクトされます。
RedirectIfAuthenticatedLoginController
、RegisterController
、ResetPasswordController
、およびVerificationController
コントローラーでredirectTo
プロパティを定義することでカスタマイズできます。認証されたリダイレクトの場所:
次に、ユーザー URI をリダイレクトするときに新しい場所にリダイレクトするように、protected $redirectTo = '/';
ミドルウェアの
redirectTohandle
メソッドを変更する必要があります。リダイレクト パスにカスタム生成ロジックが必要な場合は、
属性の代わりに
{ Tip} redirectTo メソッドは redirectTo 属性より優先されます。redirectTo
メソッドを定義できます:protected function redirectTo(){ return '/path'; }
カスタムユーザー名Laravel はデフォルトで認証に
emailフィールドを使用します。他のフィールドを使用する場合は、
LoginController
コントローラーでusername
メソッドを定義できます:public function username(){ return 'username'; }
カスタマイズされたウォッチャー
ユーザー認証と登録のための「ウォッチャー」をカスタマイズすることもできます。この機能を実装するには、
guard
メソッドをLoginController
、RegisterController
、およびResetPasswordController
で定義する必要があります。このメソッドはガード インスタンスを返します:use Illuminate\Support\Facades\Auth;protected function guard(){ return Auth::guard('guard-name'); }
カスタム検証/ストレージ
新規ユーザーが登録時に入力する必要があるフォーム フィールドを変更するため、またはカスタマイズするため新しいユーザーをデータベースに保存する方法は、
RegisterController
クラスを変更できます。このクラスは、新しいユーザーの検証と作成を担当します。RegisterController
クラスのvalidator
メソッドには、新しいユーザーを検証するためのルールが含まれています。このメソッドは必要に応じてカスタマイズできます。RegisterController
のcreate
メソッドは、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 つのハッシュが一致する場合、ユーザーに対して認証されたセッションが確立されます。
検証が成功した場合、
attempttrue
メソッドは、認証ミドルウェアを介して認証前にインターセプトされた URL にユーザーをリダイレクトします。予期したターゲットが存在しない場合は、このメソッドのフォールバック URI を指定できます。を返し、そうでない場合は
falseを返します。
リダイレクトの
intended
追加の条件を指定するユーザーの電子メールとパスワードに加えて、認証クエリに追加の条件を追加できます。たとえば、ユーザーが「アクティブ化」としてマークされていることを確認できます。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 AuthenticationonceBasic
メソッドを呼び出すミドルウェアを定義します。
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ミドルウェアが、
Authapp/Http/Kernel.php
クラスのweb
ミドルウェア グループにあることを確認する必要があります。
これで、'web' => [ // ... \Illuminate\Session\Middleware\AuthenticateSession::class, // ... ],
ファサードで
{note}logoutOtherDevices
メソッドを使用できるようになります。このメソッドでは、ユーザーは現在のパスワードを入力する必要があります。アプリケーションは入力フォームを通じてこのパスワードを受け入れる必要があります。use Illuminate\Support\Facades\Auth; Auth::logoutOtherDevices($password);
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
メソッドを使用することです。このメソッドを使用すると、単一のクロージャを使用して認証プロセスを迅速に定義できます。まず、
AuthServiceProvider
のboot
メソッドで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ファサードの
providerprovider
メソッドを使用してユーザー プロバイダーをカスタマイズできます。<?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')); }); }}
メソッドを使用して登録すると、
guardsauth.php
構成ファイルで新しいユーザープロバイダーに切り替えます。まず、新しいドライバーを使用するprovider
を定義します:
次に、このプロバイダーを'providers' => [ 'users' => [ 'driver' => 'riak', ], ],
構成で使用できます:
'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
関数は、一意の
$identifierと
remember_token列に格納されている「remember me」トークンを使用してユーザーを取得します。前のメソッドと同様に、
Authenticatable実装を返します。
updateRememberToken
メソッドは、
$userの
remember_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
コントラクトを見てみましょう。ユーザー プロバイダーのretrieveById
、retrieveByToken
、および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', ], ];
- #認定可能な契約## ############イベント################# ##########