#php #laravel #authentication #laravel-8
Вопрос:
Мне нужно разрешить вход только для разрешенных пользователей, это мой контроллер:
class LoginController extends Controller
{
public function index()
{
return view('login');
}
public function login(Request $request)
{
$credentials = $request->only('user', 'password');
if (!Auth::attempt($credentials)) {
return back()->with('error', 'Usuario o Contraseña Invalidos!');
} else if (Auth::user()->status != 1) {
return back()->with('error', 'Usuario no autorizado');
}
$request->session()->regenerate();
return redirect('home');
}
public function logout(Request $request)
{
Auth::logout();
$request->session()->regenerate();
return redirect('/login');
}
}
это работает, но это позволяет всем пользователям, даже тем, у кого статус = 0, что я делаю не так?
спасибо за вашу помощь…
Комментарии:
1. Похоже, вы путаете представление «вход» и метод контроллера «вход».
2. Я не понял вашего комментария, где я путаю представление с контроллером?
3. В методе контроллера «индекс»
return view('login');
, который вернет представление «вход» без проверки подлинности, иpublic function login(Request $request)
это отдельный метод контроллера.4. Этот случай уже приведен в документах
Ответ №1:
Auth::attempt
примите дополнительные условия запроса к запросу аутентификации в дополнение к электронной почте и паролю пользователя.
if (Auth::attempt(['email' => $email, 'password' => $password, 'status' => 1])) {
// Authentication was successful...
}
Ответ №2:
В свой логинконтроллер добавьте это:
protected function credentials(IlluminateHttpRequest $request)
{
//return $request->only($this->username(), 'password');
return [$this->username() => $request->{$this->username()}, 'password' => $request->password, 'status' => 1];
}
Комментарии:
1. Пожалуйста, добавьте контекст к вашему ответу, чтобы помочь тем, кто понимает ваш ответ и как он применим к заданному вопросу.