Не работает авторизация через email

Рейтинг: 1Ответов: 2Опубликовано: 06.02.2023

Если заполняю форму значением поля которое есть в 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';
    }

Ниже скрин полей в БД.введите сюда описание изображения

Ответы

▲ 0Принят
// Почему авторизация в методе 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();
}
▲ 0

Разобрался сам, но спасибо чуваку сверху)

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';
    }
}