Как сделать пользовательский логин только для администратора в laravel?

#mysql #laravel #authentication #eloquent

#mysql #laravel #аутентификация #красноречивый

Вопрос:

Я использую интерфейс laravel для аутентификации. Теперь я хочу настроить пользовательский вход, в который может войти только администратор, в противном случае пользователь будет перенаправлен на страницу входа пользователя. В таблице пользователя одно имя столбца «is_admin». Если is_admin == 1, то возвращается в панель администратора, в противном случае вернитесь на страницу входа пользователя. Вот мой пользовательский метод входа в систему

 public function adminAuth(Request $request) {

    $request->validate([
        'email'    => 'required',
        'password' => 'required',
    ]);
    $credentials = $request->only('email', 'password');
      if (Auth::attempt($credentials)) {
        $user = User::where('email', $request->email)->first();
        if ($user->is_admin == 1) {
            return redirect()->route('admin.home');
        } else {
            return redirect()->back()->with('error', 'Oppes! You have no permission ');
        }
    }
    return redirect()->back()->with('error', 'Oppes! You have entered invalid credentials');
} 
 

Теперь проблема решена

Ответ №1:

Я предлагаю вам добавить приведенную ниже логику в redirectTo() метод проверки подлинности промежуточного программного обеспечения, затем определить другое представление и контроллер для входа в систему администратора.

Приложение Http Промежуточное программное обеспечение Аутентификация

 protected function redirectTo($request)
{
    if (!$request->expectsJson() amp;amp; Str::is('admin*', request()->path())) {

        return route('admin.login');
    }

    if (!$request->expectsJson()) {
        return route('login');
    }
}
 

Ответ №2:

Вы могли бы использовать защиту аутентификации.

 if (Auth::guard('admin')->attempt($credentials)) {
  //
}
 

Вы можете определить своих охранников в config/auth.php файл в вашем проекте.

В качестве альтернативы, вы можете добавить условие в Auth::attempt() . как показано ниже:

 if (Auth::attempt(['email' => $email, 'password' => $password, 'is_admin' => 1])) {
// The user is admin
}
 

Узнайте больше здесь: https://laravel.com/docs/8.x/authentication

Ответ №3:

Во-первых, я не разработчик Laravel, но как только вы подтвердите учетные данные пользователя, пытающегося войти в систему, вы можете сделать что-то вроде этого:

  1. Получить значение ‘is_admin’ пользователя
  2. если is_admin == 1
  3. перенаправить пользователя на страницу администратора
  4. иначе, если is_admin != 1
  5.  direct user to user page.
     
  6. завершить, если

Комментарии:

1. Проблема решена. Я добавляю это if (Auth::attempt($credentials)) { $user = User::where(’email’, $request->email)->first(); if ($user-> is_admin == 1) { return redirect()->route(‘admin.home’); } else { return redirect()->back()->with(‘ошибка’, ‘Против! У вас нет разрешения на доступ к этому ‘); } }