提问人:Fernando Vieira 提问时间:7/16/2023 最后编辑:Fernando Vieira 更新时间:7/16/2023 访问量:79
在Laravel中验证用户身份和显示验证消息时出错
Error authenticating user and displaying validation messages in Laravel
问:
我在用户身份验证和在 Laravel 中显示验证消息时遇到了困难。尝试登录时,用户未正确进行身份验证,并且不显示验证错误消息。
我按照官方的Laravel文档进行身份验证和验证,但即使在人工智能的帮助下,我也没有得到预期的结果。以下是我的一些代码片段:
public function store(Request $request)
{
$request->validate([
'email' => 'required|email',
'password' => 'required',
]);
$credentials = $request->only('email', 'password');
if (auth()->attempt($credentials)) {
$user = auth()->user();
$request->session()->put('user', $user);
return redirect()->route('home');
}
throw ValidationException::withMessages([
'email' => 'Invalid email or password.',
]);
}
以下是 HTML 代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Login</title>
</head>
<body>
<h1>Login</h1>
<form action="/login" method="post">
@csrf
<input type="email" name="email" placeholder="Email">
<input type="password" name="password" placeholder="Password">
<input type="submit" value="Login">
</form>
</body>
</html>
最后,路线:
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\UserController;
use App\Http\Controllers\HomeController;
use App\Http\Controllers\LoginController;
Route::get('/users', [UserController::class, 'index'])->name('users.index');
Route::get('/users/create', [UserController::class, 'create']);
Route::post('/users', [UserController::class, 'store']);
Route::get('/users/{user}', [UserController::class, 'show']);
Route::get('/users/{user}/edit', [UserController::class, 'edit']);
Route::put('/users/{user}', [UserController::class, 'update']);
Route::delete('/users/{user}', [UserController::class, 'destroy'])->name('users.destroy');
Route::get('/home', [HomeController::class, 'index'])->name('home');
Route::get('/login', [LoginController::class, 'index'])->name('login');
Route::post('/login', [LoginController::class, 'store']);
?>
我尝试使用登录表单中提供的凭据对用户进行身份验证。如果凭据正确,我希望 Laravel 能够正确验证用户身份。我还在使用方法中设置了验证规则。我预计,如果电子邮件和密码字段填写不正确,Laravel 会在视图上显示错误消息。store()
LoginController
$request->validate([...])
login.blade.php
当我使用正确的凭据提交登录表单时,Laravel 没有正确验证用户身份,而是重定向回登录页面而不显示任何错误消息。当我提交包含空字段或无效数据的表单时,视图上也不会显示相应的错误消息。相反,表单会重定向回登录页面,而不会提供任何反馈。
我相信某些东西丢失或配置不正确,因为Laravel没有正确验证用户身份并且没有显示验证消息。
我将不胜感激您能为解决此问题提供任何帮助。
答:
0赞
Ariful Islam
7/16/2023
#1
您最初正在验证电子邮件和密码,这很好。登录失败后,您会抛出异常,这就是为什么它不会将您重定向到登录页面的原因。这就是为什么应该重定向到有错误的上一页的原因。
因此,请修改您的存储方法,如下所示
public function store(Request $request)
{
$request->validate([
'email' => 'required|email',
'password' => 'required',
]);
$credentials = $request->only('email', 'password');
if (auth()->attempt($credentials)) {
$user = auth()->user();
$request->session()->put('user', $user);
return redirect()->route('home');
}
return redirect()->back()->withErrors(['msg' => 'Invalid email or password used.']);
}
现在在登录页面的刀片文件中使用以下代码,这将打印错误。根据需要修改设计或其他东西
@if($errors->any())
<h4>{{$errors->first()}}</h4>
@endif
评论
0赞
Fernando Vieira
7/17/2023
当找不到用户时,会出现一条消息,在此之前它是正确的!但是,如果我添加一个在银行注册的用户,就好像还没有找到他一样,错误消息以同样的方式出现。
0赞
Fernando Vieira
7/17/2023
通过一些测试,我发现通过种子进行的注册有效并执行登录,但手动注册的注册不起作用。
评论