attemptとintendedについてわからなかったので調べた。
attemptメソッドは認証処理をするメソッドで引数に配列で認証情報、メールアドレスやパスワードをkey、valueの形で渡すことで認証を行う。
intendedメソッドは認証フィルターがかかる前にアクセスしようとしていたurlにユーザーをリダイレクトしてくれる。
attemptメソッドは最初の引数として、キー/値ペアの配列を受け取ります。配列中の他の値は、データベーステーブルの中からそのユーザーを見つけるために使用されます。そのため、上の例ではemailカラム値によりユーザーが取得されます。データベース中のハッシュ済みパスワードと比較する前に、フレームワークは自動的に値をハッシュ化するため、passwordへ指定する値はハッシュ化しないでください。2つのハッシュ済みパスワードが一致したら、そのユーザーの新しい認証セッションが開始されます。
attemptメソッドは、認証が成功すればtrueを返します。失敗時はfalseを返します。
リダイレクタ―のintendedメソッドは、認証フィルターにかかる前にアクセスしようとしていたURLへ、ユーザーをリダイレクトしてくれます。そのリダイレクトが不可能な場合の移動先として、フォールバックURIをこのメソッドに指定してください。
https://readouble.com/laravel/5.5/ja/authentication.html
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Auth;
class LoginController extends Controller
{
/**
* 認証を処理する
*
* @return Response
*/
public function authenticate()
{
if (Auth::attempt(['email' => $email, 'password' => $password])) {
// 認証に成功した
return redirect()->intended('dashboard');
}
}
}
さらに条件を加える場合
if (Auth::attempt(['email' => $email, 'password' => $password, 'active' => 1])) {
// ユーザーは存在しており、かつアクティブで、資格停止されていない
}
activeカラムが1であれば認証ということなのでユーザーのアカウト制限とかで使えるのかな。
特定のモデルとテーブルを利用する場合はどうなるかというと
Authファサードのguardメソッドにより、使用したいガードインスタンスを指定できます。これにより全く異なった認証用のモデルやユーザーテーブルを使い、アプリケーションの別々の部分に対する認証を管理することができます。
guardメソッドへ渡すガード名は、auth.php認証ファイルのguards設定の一つと対応している必要があります。
if (Auth::guard('admin')->attempt($credentials)) {
//
}
となっている。
config/auth.phpの
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
],//ここから追加
'user' => [
'driver' => 'session',
'provider' => 'users',
],
'admin' => [
'driver' => 'session',
'provider' => 'admins',
],
'admin-api' => [
'driver' => 'token',
'provider' => 'admins',
],//ここまで追加
],
この辺の設定を揃えるということか。
なるほど
ログインを永続化する場合は
アプリケーションでログイン維持(Remember me)機能を持たせたい場合は、attemptメソッドの第2引数に論理値を指定します。ユーザーが自分でログアウトしない限り、認証が無期限に持続するようになります。もちろん、”remember me”トークンを保存するために使用する文字列のremember_tokenカラムをusersテーブルに持たせる必要があります。
if (Auth::attempt(['email' => $email, 'password' => $password], $remember)) {
// このメンバーは継続ログインされる
}