#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, но как только вы подтвердите учетные данные пользователя, пытающегося войти в систему, вы можете сделать что-то вроде этого:
- Получить значение ‘is_admin’ пользователя
- если is_admin == 1
- перенаправить пользователя на страницу администратора
- иначе, если is_admin != 1
-
direct user to user page.
- завершить, если
Комментарии:
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(‘ошибка’, ‘Против! У вас нет разрешения на доступ к этому ‘); } }