認証
警告古いバージョンの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
クラスを変更することができます。 このクラスは、アプリケーションの新しいユーザーの検証と作成を担当します。
Registrar
のvalidator
メソッドにはアプリケーションの新規ユーザーの検証ルールが含まれていますが、Registrar
のcreate
メソッドはデータベースに新しいUser
レコードを作成します。 あなたが望むように、これらのメソッドのそれぞれを自由に変更することができます。 Registrar
は、AuthenticatesAndRegistersUsers
トレイトに含まれるメソッドを介してAuthController
によって呼び出されます。
手動認証
提供されているAuthController
実装を使用しないことを選択した場合、Laravel認証クラスを直接使用してユーザーの認証を管理する必要があります。 心配しないで、それはまだ楽勝です! まず、attempt
メソッドをチェックしてみましょう:
attempt
メソッドは、最初の引数としてキーと値のペアの配列を受け入れます。 password
の値はハッシュされます。 配列内の他の値は、データベーステーブル内のユーザーを見つけるために使用されます。 したがって、上記の例では、ユーザーはemail
列の値によって取得されます。 ユーザーが見つかった場合、データベースに格納されているハッシュされたパスワードは、配列を介してメソッドに渡されたハッシュされたpassword
値と比較され 2つのハッシュ化されたパスワードが一致する場合は、新しい認証されたセッションがユーザーに対して開始されます。
認証が成功した場合、attempt
メソッドはtrue
を返します。 それ以外の場合は、false
が返されます。
注:この例では、
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
ディレクトリにあります。 独自のアプリケーションの設計に合わせて、これらのビューを自由に変更できます。
ユーザーは、PasswordController
のgetReset
メソッドを指すリンクを含む電子メールを受け取ります。 このメソッドは、パスワードリセットフォームを表示し、ユーザーがパスワードをリセッ パスワードがリセットされると、ユーザーは自動的にアプリケーションにログインし、/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\SocialiteServiceProvider
をconfig/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();
ユーザーインスタンスを取得したら、ユーザーに関するいくつかの詳細を取得できます。