Не работает авторизация через email
Если заполняю форму значением поля которое есть в name таблицы БД, то авторизация происходит корректно. Если же с помощью информации которая есть в поле email, то страница обновляется, будто данные не верны или же вообще остутствуют.
public function store(Request $request){
$request->validate([
'login' => ['required'],
'password' => ['required', 'string']
]);
// $userName = DB::table('users')->where('name', '=', $request['login']);
// $userEmail = DB::table('users')->where('email', '=', $request['login']);
if(DB::table('users')->where('name', '=', $request['login'])){
if (Auth::attempt(['name' => $request['login'], 'password' => $request['password']])){
return redirect()->route('home');
}
return back();
}
elseif(DB::table('users')->where('email', '=', $request['login'])){
if(Auth::attempt(['email' => $request['login'], 'password' => $request['password']])){
return redirect()->route('home');
}
return back();
}
else{
return 'Not okay';
}
Ответы (2 шт):
Автор решения: InDevX
→ Ссылка
// Почему авторизация в методе store???
public function store(Request $request)
{
// валидацию бы в form request перенести
$request->validate([
'login' => ['required'],
'password' => ['required', 'string']
]);
// самый простой способ - проверять логин это email или нет
// если логин это валидный email - используем для входа поле email
$field = filter_var($request['login'], FILTER_VALIDATE_EMAIL) ? 'email' : 'name';
Auth::attempt([$field => $request['login'], 'password' => $request['password']]);
// редиректим на home если авторизованы
if ( Auth::check() ) {
return redirect()->route('home');
}
return redirect()->back();
}
Автор решения: AionTeck
→ Ссылка
Разобрался сам, но спасибо чуваку сверху)
public function store(Request $request){
$request->validate([
'login' => ['required'],
'password' => ['required', 'string']
]);
if(DB::table('users')->where('name', '=', $request['login'])->value('name')){
if (Auth::attempt(['name' => $request['login'], 'password' => $request['password']])){
return redirect()->route('home');
}
return back();
}
elseif(DB::table('users')->where('email', '=', $request['login'])->value('email')){
if(Auth::attempt(['email' => $request['login'], 'password' => $request['password']])){
return redirect()->route('home');
}
return back();
}
else{
return 'Not okay';
}
}
