認証

警告古いバージョンのLaravelのドキュメントを参照しています。 プロジェクトをLaravel8にアップグレードすることを検討してください。x.

  • はじめに
  • ユーザーの認証
  • 認証されたユーザーの取得
  • ルートの保護
  • HTTP基本認証
  • パスワードリマインダー&リセット
  • ソーシャル認証

はじめに

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

デフォルトでは、LaravelはappディレクトリにApp\Userモデルを含めています。 このモデルはデフォルトのEloquent認証ドライバで使用できます。

覚えておいてください:このモデルのデータベーススキーマを構築するときは、password列を少なくとも60文字にしてください。 また、開始する前に、users(または同等の)テーブルに100文字のnull許容文字列remember_token列が含まれていることを確認してください。 この列は、アプリケーションによって維持されている”remember me”セッションのトークンを格納するために使用されます。 これは、移行で$table->rememberToken();を使用して行うことができます。 もちろん、laravel5はこれらの列の移行をすぐに出荷します!

アプリケーションがEloquentを使用していない場合は、laravel query builderを使用するdatabase認証ドライバを使用できます。

ユーザーの認証

Laravelには2つの認証関連コントローラが用意されています。 AuthControllerは新しいユーザー登録と”ログイン”を処理し、PasswordControllerは既存のユーザーが忘れたパスワードをリセットするのに役立つロジックを含みます。

これらの各コントローラは、必要なメソッドを含めるためにトレイトを使用します。 多くのアプリケーションでは、これらのコントローラをまったく変更する必要はありません。 これらのコントローラーがレンダリングするビューは、resources/views/authディレクトリにあります。 これらのビューは自由にカスタマイズできますが、必要に応じて自由にカスタマイズできます。

ユーザーレジストラ

新しいユーザーがアプリケーションに登録するときに必要なフォームフィールドを変更するには、App\Services\Registrarクラスを変更することができます。 このクラスは、アプリケーションの新しいユーザーの検証と作成を担当します。

Registrarvalidatorメソッドにはアプリケーションの新規ユーザーの検証ルールが含まれていますが、Registrarcreateメソッドはデータベースに新しいUserレコードを作成します。 あなたが望むように、これらのメソッドのそれぞれを自由に変更することができます。 Registrarは、AuthenticatesAndRegistersUsersトレイトに含まれるメソッドを介してAuthControllerによって呼び出されます。

手動認証

提供されているAuthController実装を使用しないことを選択した場合、Laravel認証クラスを直接使用してユーザーの認証を管理する必要があります。 心配しないで、それはまだ楽勝です! まず、attemptメソッドをチェックしてみましょう:

attemptメソッドは、最初の引数としてキーと値のペアの配列を受け入れます。 passwordの値はハッシュされます。 配列内の他の値は、データベーステーブル内のユーザーを見つけるために使用されます。 したがって、上記の例では、ユーザーはemail列の値によって取得されます。 ユーザーが見つかった場合、データベースに格納されているハッシュされたパスワードは、配列を介してメソッドに渡されたハッシュされたpassword値と比較され 2つのハッシュ化されたパスワードが一致する場合は、新しい認証されたセッションがユーザーに対して開始されます。

認証が成功した場合、attemptメソッドはtrueを返します。 それ以外の場合は、falseが返されます。

注:この例では、emailは必須オプションではなく、単なる例として使用されます。 データベース内の「ユーザー名」に対応する列名を使用する必要があります。

intendedリダイレクト関数は、認証フィルタによってキャッチされる前に、アクセスしようとしていたURLにユーザーをリダイレクトします。 目的の宛先が利用できない場合に備えて、このメソッドにフォールバックURIを指定することができます。

条件でユーザーを認証する

認証クエリに追加の条件を追加することもできます:

if (Auth::attempt()){ // The user is active, not suspended, and exists.}

ユーザーが認証されているかどうかの判断

ユーザーがすでにアプリケーションにログインしているかどうかを判断するには、checkメソッドを使用します:

if (Auth::check()){ // The user is logged in...}

ユーザーを認証し、それらを”記憶する”

アプリケーションで”記憶する”機能を提供したい場合は、attemptメソッドの第二引数としてブール値を渡すことができます。 もちろん、あなたのusersテーブルには、”remember me”トークンを格納するために使用される文字列remember_token列が含まれている必要があります。

if (Auth::attempt(, $remember)){ // The user is being remembered...}

ユーザーを”覚えている”場合は、viaRememberメソッドを使用して、ユーザーが”私を覚えている”cookieを使用して認証されたかどうかを判断できます:

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

IDでユーザーを認証する

IDでユーザーをアプリケーションにログインするには、loginUsingIdメソッドを使用します:

Auth::loginUsingId(1);

Login

を使用せずにユーザーの資格情報を検証するvalidateメソッドを使用すると、実際にアプリケーションにログインせずにユーザーの資格情報を検証できます:

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

単一の要求に対してユーザーをログイン

単一の要求に対してユーザーをアプリケーションにログインするには、onceメソッドを使用することもできます。 セッションやクッキーは利用されません:

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

ユーザーの手動ログイン

既存のユーザーインスタンスをアプリケーションにログインする必要がある場合は、ユーザーインスタンスでloginメソッドを呼び出すこ:

Auth::login($user);

これは、attemptメソッドを使用して資格情報を使用してユーザーにログインするのと同じです。

アプリケーションからユーザーをログアウトする

Auth::logout();

もちろん、組み込みのLaravel認証コントローラを使用している場合は、アプリケーションからユーザーをロ

認証イベント

attemptメソッドが呼び出されると、auth.attemptイベントが発生します。 認証の試行が成功し、ユーザーがログインしている場合は、auth.loginイベントも発生します。

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

ユーザーが認証されると、ユーザーのインスタンスを取得するにはいくつかの方法があります。

まず、Authファサードからユーザーにアクセスできます。

第二に、Illuminate\Http\Requestインスタンスを介して認証されたユーザーにアクセスできます。

第三に、Illuminate\Contracts\Auth\Authenticatableコントラクトをタイプヒントすることができます。 この型ヒントは、コントローラーコンストラクター、コントローラーメソッド、またはサービスコンテナによって解決されたクラスの他のコンストラクタに追加で:

ルートの保護

ルートミドルウェアは、認証されたユーザーのみが特定のルートにアクセスできるようにするために使用できます。 Laravelはデフォルトでauthミドルウェアを提供しており、app\Http\Middleware\Authenticate.phpで定義されています。

HTTP Basic Authentication

HTTP Basic Authenticationは、専用の”ログイン”ページを設定せずに、アプリケーションのユーザーを簡単に認証する方法を提供します。 開始するには、auth.basicミドルウェアをルートにアタッチします:

HTTP Basicを使用したルートの保護

Route::get('profile', );

デフォルトでは、basicミドルウェアはユーザーレコードのemail列を「ユーザー名」として使用します。

ステートレスHTTP基本フィルタの設定

セッションでユーザー識別子cookieを設定せずにHTTP基本認証を使用することもできます。 これを行うには、onceBasicメソッドを呼び出すミドルウェアを定義します:

public function handle($request, Closure $next){ return Auth::onceBasic() ?: $next($request);}

PHP FastCGIを使用している場合、HTTP基本認証はそのままでは正常に動作しない場合があります。 次の行を.htaccessファイルに追加する必要があります:

RewriteCond %{HTTP:Authorization} ^(.+)$RewriteRule .* - 

パスワードリマインダ&Reset

Model&Table

ほとんどのwebアプリケーションは、忘れたパスワードをリセットする方法を提供します。 各アプリケーションでこれを強制的に再実装するのではなく、laravelはパスワードリマインダを送信し、パスワードリセットを実行するための便利な方法を提供しています。

開始するには、UserモデルがIlluminate\Contracts\Auth\CanResetPasswordコントラクトを実装していることを確認します。 もちろん、フレームワークに含まれているUserモデルはすでにこのインターフェイスを実装しており、Illuminate\Auth\Passwords\CanResetPasswordトレイトを使用してインターフェイスを実装するため

リマインダテーブルの生成移行

次に、パスワードリセットトークンを格納するテーブルを作成する必要があります。 このテーブルのマイグレーションは、すぐにLaravelに含まれており、database/migrationsディレクトリにあります。 だからあなたがする必要があるのは移行することだけです:

php artisan migrate

パスワードリマインダーコントローラ

LaravelにはAuth\PasswordControllerも含まれており、ユーザーパスワードをリセットするために必要なロジックが含まれています。 私たちも、あなたが始めるためのビューを提供しました! ビューはresources/views/authディレクトリにあります。 独自のアプリケーションの設計に合わせて、これらのビューを自由に変更できます。

ユーザーは、PasswordControllergetResetメソッドを指すリンクを含む電子メールを受け取ります。 このメソッドは、パスワードリセットフォームを表示し、ユーザーがパスワードをリセッ パスワードがリセットされると、ユーザーは自動的にアプリケーションにログインし、/homeにリダイレクトされます。 リセット後のリダイレクトの場所をカスタマイズするには、redirectToプロパティをPasswordControllerに定義します:

protected $redirectTo = '/dashboard';

注:デフォルトでは、パスワードリセットトークンは1時間後に期限切れになります。 これを変更するには、config/auth.phpファイルのreminder.expireオプションを使用します。

ソーシャル認証

典型的なフォームベースの認証に加えて、LaravelはLaravel Socialiteを使用してOAuthプロバイダで認証するための簡単で便利な方法も提供しています。 Socialiteは現在、Facebook、Twitter、Google、GitHub、Bitbucketでの認証をサポートしています。

Socialiteを使い始めるには、パッケージをcomposer.jsonファイルに含めます:

"laravel/socialite": "~2.0"

次に、Laravel\Socialite\SocialiteServiceProviderconfig/app.php設定ファイルに登録します。 また、ファサードを登録することもできます:

'Socialize' => 'Laravel\Socialite\Facades\Socialite',

アプリケーションが使用するOAuthサービスの資格情報を追加する必要があります。 これらの資格情報は、config/services.php設定ファイルに配置し、キーを使用する必要がありますfacebook, twitter, google, またはgithub、アプリケーションが必要とするプロバイダに応じて。 例えば:

'github' => ,

次に、ユーザーを認証する準備が整いました! あなたは二つのルートが必要になります: 一つはユーザーをOAuthプロバイダにリダイレクトするためのもので、もう一つは認証後にプロバイダからコールバックを受信するためのものです。 Socializeファサードを使用した例を次に示します。

redirectメソッドはOAuthプロバイダーにユーザーを送信し、userメソッドは着信要求を読み取り、プロバイダーからユーザーの情報を取得します。 ユーザーをリダイレクトする前に、要求に”スコープ”を設定することもできます:

return Socialize::with('github')->scopes()->redirect();

ユーザーインスタンスを取得したら、ユーザーに関するいくつかの詳細を取得できます。

ユーザーの詳細を取得する