認証settingssearchanchorlibrary_booksイントロダクションIntroductionLaravelでは簡単に認証が実装できます。実際ほとんど全て最初から設定済みです。認証の設定ファイルはconfig/auth.phpに用意してあり、認証サービスの振る舞いを調整できるように、読みやすいコメント付きでたくさんのオプションが用意されています。services.Laravelの認証機能は「ガード」と「プロバイダ」を中心概念として構成されています。ガードは各リクエストごとに、どのようにユーザを認証するかを定義します。Laravelにはセッションストレージとクッキーを使いながら状態を維持するsessionガードと、各リクエストごとに認証をパスさせるための「APIトークン」を使用したユーザ認証を行うtokenガードが用意されています。request.プロバイダは永続ストレージから、どのようにユーザを取得するかを定義します。LaravelはEloquentとデータベースクリエビルダを使用しユーザを取得する機能を用意しています。アプリケーションの必要性に応じて、自由にプロバイダを追加できます。application.混乱しても心配ありません。通常のアプリケーションでは、デフォルトの認証設定を変更する必要はありません。Eloquentモデルをappディレクトリに用意しています。このモデルはデフォルトEloquent認証ドライバで使用しています。アプリケーションでEloquentを使用しなければ、Laravelクエリビルダを使用するdatabase認証ドライバを使用する必要があります。builder.App\Userモデルのデータベーススキマー構築時に、確実にパスワードカラムを最低60文字確保してください。デフォルトの255文字にするのが、良い方法でしょう。choice.さらにusers、もしくは同等の働きをするテーブルには、100文字のremember_token文字列カラムも含めてください。me"セッションのトークンを保存しておくカラムです。マイグレーションで$table->rememberToken();を実行すると用意されます。QuickstartLaravelでは認証に関連する2つのコントローラーがApp\Http\Controllers\Auth名前空間下に用意されています。AuthControllerは新ユーザの登録と「ログイン」を処理します。ひとつのPasswordControllerには、登録済みユーザがパスワードを忘れた時にリセットするためのロジックが準備されています。必要なメソッドを読み込むために両方のコントローラーでトレイトが使われています。多くのアプリケーションで、これらのコントローラーを変更する必要は全く無いでしょう。all.ルート定義Routing簡単なコマンド一つで、認証に必要となるルート定義とビューをすべてスカフォールディングできる簡単な手段をLaravelは提供しています。make:authこのコマンドはインストールしたてのアプリケーションに対し実行してください。認証の全エンドポイントに対するルートとともに、登録とログインのビューが準備されます。HomeControllerも生成され、アプリケーションのダッシュボード(管理領域)に対する、ログインリクエストのPOSTを処理します。アプリケーションの必要に応じて、このコントローラは自由に削除できます。make:authコマンドはresources/views/authディレクトリへ、認証に必要なすべてのビューを生成します。directory.make:authコマンドはresources/views/layoutsディレクトリにアプリケーションのベースレイアウトビューも生成します。CSSフレームワークを使用していますが、自由にカスタマイズしてください。wish.認証Authenticatingこれで、認証コントローラを含め、必要なルートとビューの準備が整いました。アプリケーションに新しいユーザを登録できるようになりました。ブラウザでアプリケーションへアクセスしてください。認証コントローラは(内部で使用しているトレイトにより)、既存ユーザの認証と、新しいユーザをデータベースへ保存するロジックをすでに備えています。Customizationユーザが認証に成功すると、/のURIへリダイレクトします。これをカスタマイズするには、AuthControllerのredirectToプロパティに認証後のリダイレクト先の場所を定義してください。'/home';ユーザが認証に失敗した場合、自動的にログインフォームへリダイレクトします。Customization更に、ユーザを認証するために使用する「ガード」をカスタマイズすることも可能です。最初に、AuthControllerのguardプロパティを定義してください。このプロパティの値は、auth.php設定ファイルのガード設定に対応させます。Customizationアプリケーションに新しいユーザを登録する場合に入力してもらうフォームのフィールドを変更するか、データベースに新しいユーザレコードを登録する方法をカスタマイズしたい場合は、AuthControllerクラスを変更してください。このクラスはアプリケーションで新しいユーザのバリデーションと作成に責任を持っています。application.AuthControllerのvalidatorメソッドはアプリケーションの新しいユーザに対するバリデーションルールで構成されています。このメソッドはお気に召すまま自由に変更してください。ORMを使用し、データベースに作成することに責任を持っています。データベースの必要に合わせて自由にこのメソッドを変更してください。UserAuthファサードを使えば認証済みユーザへ簡単にアクセスできます。Auth::user();もしくは、ユーザが認証済みであれば、Illuminate\Http\Requestインスタンス経由で、ユーザへアクセスすることもできます。コントローラメソッドでタイプヒントしたクラスは、自動的にインスタンスが依存注入されることを思い出してください。Authenticatedユーザが既にアプリケーションにログインしているかを調べるには、Authファサードのcheckメソッドが使えます。認証時にtrueを返します。ユーザはログインしている}しかし特定のルートやコントローラーにユーザをアクセスさせる前に、認証済みであるかをミドルウェアにより確認することもできます。詳細についてはルートの保護のドキュメントを参照してください。Routesルートミドルウェアは特定のルートに許可されたユーザのみアクセスを許すために使われます。Laravelにはapp\Http\Middleware\Authenticate.phpの中で定義されているauthミドルウェアが最初から用意されています。ルートの定義にこのミドルウェアを指定するだけです。'ProfileController@show']);もちろんコントローラークラスを使っているならルート定義に付加する代わりに、コントローラーのコンストラクターでmiddlewareメソッドを呼び出すことができます。Guardauthミドルウェアをルートに対し指定するときに、認証を実行するガードを指定することもできます。'ProfileController@show']);指定するガードは、auth.php設定ファイルのguards配列のキーを指定してください。ThrottlingLaravelの組み込みAuthControllerクラスを使用している場合に、アプリケーションのログイン制限を行うにはIlluminate\Foundation\Auth\ThrottlesLoginsトレイトをuseします。デフォルトでは何度も正しくログインできなかった後、一分間ログインできなくなります。制限はユーザの名前/メールアドレスとIPアドレスで限定されます。Usersもちろん、Laravelに含まれる認証コントローラーを使うことを強要しているわけでありません。これらのコントローラーを削除する選択肢を選ぶのなら、Laravel認証クラスを直接使用しユーザの認証を管理する必要があります。cinch!Laravelの認証サービスにはAuthファサードでアクセスできます。クラスの最初でAuthファサードを確実にインポートしておきましょう。次にattemptメソッドを見てみましょう。}}attemptメソッドは最初の引数として、キー/値ペアの配列を受け取ります。配列中の他の値は、データベーステーブルの中からそのユーザを見つけるために使用されます。上の例ではemailカラムの値により、ユーザが取得されます。ユーザが見つかれば、配列でメソッドに渡されたハッシュ済みのpassword値と、データベースに保存してあったハッシュ済みpasswordが比較されます。2つのハッシュ済みパスワードが一致したら、そのユーザの新しい認証セッションが開始されます。user.attemptメソッドは、認証が成功すればtrueを返します。失敗時はfalseを返します。returned.リダイレクタ―のintendedメソッドは、認証フィルターにかかる前にアクセスしようとしていたURLへ、ユーザをリダイレクトしてくれます。そのリダイレクトが不可能な場合の移動先として、フォールバックURIをこのメソッドに指定できます。Conditionsお望みであれば、ユーザのメールアドレスとパスワードに付け加え、認証時のクエリに追加の条件を指定することも可能です。この例のように、emailを必ず認証に使用しなくてならない訳ではありません。データーベース中にあるユーザ名(username)に該当する、一意にユーザを特定できるカラムであれば何でも使用できます。InstancesAuthファサードのguardメソッドにより、使用したいガードインスタンスを指定できます。これにより全く異なった認証用のモデルやユーザテーブルを使い、アプリケーションの別々の部分に対する認証を管理することができます。tables.guardメソッドへ渡すガード名は、auth.php認証ファイルのguards設定の一つと対応している必要があります。Outアプリケーションからユーザをログアウトさせるには、Authファサードのlogoutメソッドを使用してください。これはユーザセッションの認証情報をクリアします。me)機能を持たせたい場合は、attemptメソッドの第2引数に論理値を指定します。ユーザが自分でログアウトしない限り、認証が無期限に持続するようになります。me"トークンを保存するために使用する文字列のremember_tokenカラムをusersテーブルに持たせる必要があります。me"クッキーを使用して認証されているかを判定するには、viaRememberメソッドを使用します。Instance既に存在しているユーザインスタンスでアプリケーションにログインさせる必要があれば、loginメソッドにそのユーザインスタンスを指定し呼び出してください。指定されたオブジェクトはIlluminate\Contracts\Auth\Authenticatable契約を実装している必要があります。Laravelが用意しているApp\Userモデルはこのインターフェイスを実装しています。true);もちろん、使用したいガードインスタンスを指定することもできます。IDユーザをアプリケーションへIDによりログインさせる場合は、loginUsingIdメソッドを使います。このメソッドは認証させたいユーザの主キーだけを引数に受け取ります。Onceonceメソッドを使用すると、アプリケーションにユーザをそのリクエストの間だけログインさせることができます。セッションもクッキーも使用しないため、ステートレスなAPIを構築する場合に便利です。onceメソッドの引数はattemptメソッドと同じです。AuthenticationHTTP基本認証により、専用の「ログイン」ページを用意しなくても手っ取り早くアプリケーションにユーザをログインさせられます。これを使用するには、ルートにauth.basicミドルウェアを付けてください。auth.basicミドルウェアはLaravelフレームワークに含まれているので、定義する必要はありません。認証済みのユーザのみが実行できる...}]);ミドルウェアをルートに指定すれば、ブラウザーからこのルートへアクセスされると自動的に認証が求められます。デフォルトでは、auth.basicミドルウェアはユーザを決める"username"としてユーザのemailカラムを使用します。FastCGIを使用している場合、初期状態のままでHTTP基本認証は正しく動作しないでしょう。以下の行を.htaccessファイルへ追加してください。Authenticationセッションの識別クッキーを用いずにHTTP基本認証を使用することもできます。これは特にAPI認証に便利です。実装するには、onceBasicメソッドを呼び出すミドルウェアを定義してください。onceBasicメソッドが何もレスポンスを返さなかった場合、リクエストをアプリケーションの先の処理へ通します。}}次にルートミドルウェアを登録し、ルートに付加します。ConsiderationsほとんどのWebアプリケーションは、パスワードを忘れた場合にリセットする機能をユーザへ提供しています。アプリケーションを構築するたびごと、何度も実装しなくても済むように、Laravelはパスワードリマインダーを送信し、パスワードをリセットするための便利な手法を提供しています。resets.これを利用するには、App\UserモデルがIlluminate\Contracts\Auth\CanResetPassword契約を実装しているか確認してください。フレームワークに用意されているApp\Userモデルでは、既にこのインターフェイスが実装されています。Illuminate\Auth\Passwords\CanResetPasswordトレイトで、このインターフェイスで実装する必要のあるメソッドが定義されています。Migration次にパスワードリセットトークンを保存しておくためのテーブルを作成します。このテーブルのマイグレーションは、最初からLaravelのdatabase/migrationsディレクトリに含まれています。マイグレートするために必要なのは次のコマンド実行だけです。migrateルート定義RoutingLaravelはユーザのパスワードをリセットするために必要なロジックを全部含んでいる、Auth\PasswordControllerを用意しています。Artisanコマンドで生成します。make:authビューViewsパスワードリセットの場合も、make:authコマンドを実行すれば、パスワードリセットに必要な全部のビューが生成されます。ビューはresources/views/auth/passwordsに生成されます。アプリケーションに合わせ、自由にカスタマイズしてください。Passwordsユーザのパスワードをリセットするルートとビューを定義できたら、ブラウザーで/password/resetのルートへアクセスするだけです。PasswordControllerは、パスワードリセットリンクを含むメールを送信し、データベースのパスワードを更新するためのロジックを含んでいます。database.パスワードがリセットされたら、そのユーザは自動的にアプリケーションにログインされ、/homeへリダイレクトされます。パスワードリセット後のリダイレクト先をカスタマイズするには、PasswordControllerのredirectToプロパティを定義してください。デフォルトでパスワードリセットトークンは、一時間有効です。これは、config/auth.phpファイルのexpireオプションにより変更できます。Customizationauth.php設定ファイルにより、複数のユーザテーブルごとに認証の振る舞いを定義するために使用する、「ガード」をそれぞれ設定できます。用意されているPasswordControllerコントローラに$guardプロパティを追加することにより、使用するガードを選択できます。Customization複数のユーザテーブルに対するパスワードをリセットするために使用する、別々のパスワード「ブローカー」をauth.phpファイルで設定できます。用意されているPasswordControllerコントローラに$brokerプロパティを追加し、使用するブローカーのカスタマイズができます。Guards独自の認証ガードはAuthファサードのextendメソッドを使用し、定義します。サービスプロバイダの中で、呼び出します。}}上記の例のように、コールバックをextendメソッドに渡し、Illuminate\Contracts\Auth\Guardの実装を返します。このインスタンスは、カスタムガードで定義が必要ないくつかのメソッドを持っています。guard.カスタムガードが定義できたら、guards設定で使用してください。Providersユーザ情報を保管するために伝統的なリレーショナルデータベースを使用したくなければ、Laravelに独自の認証ユーザプロバイダを拡張する必要があります。Authファサードのproviderメソッドを使い、カスタムユーザプロバイダを定義します。サービスプロバイダの中で、このproviderメソッドを呼び出してください。}}providerメソッドでプロバイダを登録したら、config/auth.php設定ファイルで新しいユーザプロバイダへ切り替えます。最初に、新しいドライバを使用するproviderを定義します。],],次に、このプロバイダをguards設定項目で利用します。ContractIlluminate\Contracts\Auth\UserProviderは、MySQLやRiakなどのような持続性のストレージシステムに対するIlluminate\Contracts\Auth\Authenticatableの実装を取得することだけに責任を持っています。これらの2つのインターフェイスはユーザデータがどのように保存されているか、それを表すのがどんなタイプのクラスなのかに関わらず、認証メカニズムを機能し続けるために役立っています。it.Illuminate\Contracts\Auth\UserProvider契約を見てみましょう。$credentials);}retrieveById関数は通常MySQLデータベースの自動増分IDのようなユーザを表すキーを受け付けます。IDにマッチするAuthenticatable実装が取得され、返されます。$tokenからユーザを取得します。前のメソッドと同じく、Authenticatable実装が返されます。returned.updateRememberTokenメソッドは$userのremember_tokenフィールドを新しい$tokenで更新します。me」ログインに成功した時の値でも、ログアウト時のnull値でも受け付けます。out.retrieveByCredentialsメソッドはアプリケーションにログイン時にAuth::attemptメソッドに指定するのと同じく、ユーザ認証情報の配列を引数に取ります。メソッドは認証情報に一致するユーザを裏の持続ストレージから「クエリ」する必要があります。典型的な使用方法の場合、このメソッドは$credentials['username']の"where"条件でクエリを実行するでしょう。メソッドはUserInterfaceの実装を返します。authentication.validateCredentialsメソッドは指定された$userとユーザを認証するための$credentialsとを比較します。このメソッドは$user->getAuthPassword()文字列と$credentials['password']をHash::makeした値を比較します。このメソッドはユーザの認証情報のバリデーションだけを行い、論理値を返します。ContractこれでUserProviderの各メソッドが明らかになりました。続いてAuthenticatable契約を見てみましょう。プロバイダはretrieveByIdとretrieveByCredentialsメソッドでこのインターフェイスの実装を返していたことを思い出してください。getRememberTokenName();}このインターフェイスはシンプルです。getAuthIdentifierNameメソッドは、ユーザの「主キー」フィールドの名前を返します。getAuthIdentifierメソッドはユーザの主キーを返します。MySQLを裏で使用している場合、これは自動増分される主キーでしょう。getAuthPasswordはユーザのハッシュ済みのパスワードを返します。このインターフェイスはどのORMや抽象ストレージ層を使用しているかに関わらず、どんなUserクラスに対しても認証システムが動作するようにしてくれています。デフォルトでLaravelはappディレクトリ中に、このインターフェイスを実装してるUserクラスを持っています。実装例として、このクラスを調べてみてください。example.イベントEventsLaravelは認証処理の過程で、様々なイベントを発行します。EventServiceProviderの中で、こうしたイベントに対するリスナを設定できます。kawase(Translation).ドキュメントメンテナンス期間は終了しました。明暗テーマごとに、コードハイライトのテーマを指定できます。テーマ配色確認スクリーン表示幅640px80%90%100%768px以上の幅があるときのドキュメント部分表示幅です。段落末のEボタンへカーソルオンで原文をPopupします。[tl!...]形式の挿入削除行の表示形式です。置換文字列を半角スペースで区切ってください。(最大5組各10文字まで)本文フォント総称名以外はCSSと同様に、"〜"でエスケープしてください。コードフォント総称名以外はCSSと同様に、"〜"でエスケープしてください。保存内容リセット消去localStrageに保存してある設定項目をすべて削除し、デフォルト状態へ戻します。