軽くおさらい
Laravel5.5 のAuthでAuth/LoginController.phpで使っているAuthenticatesUsers
トレイトのloginメソッドにて、以下の部分にて実際のログイン処理を行なっていると思います。実際はもっと深部がありますが、、、
if ($this->attemptLogin($request)) { return $this->sendLoginResponse($request); }
このattemptLoginメソッド内は以下のようになっています。
protected function attemptLogin(Request $request) { return $this->guard()->attempt( $this->credentials($request), $request->filled('remember') ); }
さらにこのcredentialsメソッドでパスワードを必要としています。
protected function credentials(Request $request) { return $request->only($this->username(), 'password'); }
本題
さて、ようやく本題にはいりますが、パスワードを必要とせずログインさせたいと思っていて
Route::get('test', function () { \Illuminate\Support\Facades\Auth::attempt(['email' => 'test@yahoo.co.jp']); });
としたら以下のエラーがでてしまいます。
実際にusersテーブルもあり、ユーザー登録もできていてusersテーブルのemailカラムにtest@yahoo.co.jpも存在します。
vendor配下は触りたくなくてですね、AuthenticatesUsers
トレイトのメソッドはこちらのcontroller側でオーバーライドできるのですが、、、
深部の方でパスワードは必須としているプログラムが書かれていると思うのですが、パスワードを必要とせずログインさせるベストプラクティスはないかないでしょうか?
やりたいこととしてはパスワードでのログインを撲滅したいと思っていて今回実装しています。
なのである条件の後に、attemptを使えば良いと思っているのですが、エラー画像にもある通り、
public function validateCredentials(UserContract $user, array $credentials) { $plain = $credentials['password']; return $this->hasher->check($plain, $user->getAuthPassword()); }
この部分に邪魔されているようなのです。getAuthPassword
とかもあるようだし、、、。
個人的には、多分ログインさせることさえできれば、あとはauth()->user()
とかでログイン者の情報とかは引き出せると思っています。
ログアウトも多分、Auth::guard()->logout();
でいけると思いますが、やはりログイン時だけちょっと改修必要かなと思っています。
追記
解決策として、usersテーブルにpasswordカラムを持たせ(実際使うことはない)、ログイン情報に'password => ""'の配列追加すれば理論上いけそうな気もしますが、根本的ではないですね、、、
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/10/27 07:46 編集