Laravel驗證使用者身分和顯示驗證訊息時遇到問題
P粉071626364
2023-09-04 21:41:24
<p>我在Laravel中遇到了用戶認證和顯示驗證訊息的困難。當嘗試登入時,使用者無法正確通過身份驗證,並且驗證錯誤訊息也沒有顯示。 </p>
<p>我按照官方的Laravel文件進行了認證和驗證,但即使在人工智慧的幫助下,我也沒有得到預期的結果。以下是我的一些程式碼片段:</p>
<pre class="brush:php;toolbar:false;">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.',
]);
}</pre>
<p>這是HTML程式碼:</p>
<pre class="brush:php;toolbar:false;"><!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></pre>
<p>最後,是路由:</p>
<pre class="brush:php;toolbar:false;"><?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']);
?></pre>
<p>我嘗試使用登入表單中提供的憑證對使用者進行身份驗證。如果憑證正確,我期望Laravel能夠正確地對使用者進行身份驗證。我還在<code>LoginController</code>的<code>store()</code>方法中使用<code>$request->validate([...])</code>設定了驗證規則。我期望如果電子郵件和密碼欄位沒有正確填寫,Laravel會在<code>login.blade.php</code>視圖上顯示錯誤訊息。 </p>
<p>當我使用正確的憑證提交登入表單時,Laravel無法正確地對使用者進行身份驗證,並且在不顯示任何錯誤訊息的情況下重定向回登入頁面。當我使用空白欄位或無效資料提交表單時,相應的錯誤訊息也不會顯示在視圖上。相反,表單會在沒有任何回饋的情況下重定向回登入頁面。 </p>
<p>我相信由於某些內容缺失或配置不正確,Laravel無法正確地對用戶進行身份驗證並顯示驗證訊息。 </p>
<p>如果您能提供任何幫助來解決這個問題,我將非常感激。 </p>
您最初驗證了電子郵件和密碼,這是很好的。登入失敗後,您拋出了一個異常,這就是為什麼它不會將您重新導向到登入頁面的原因。所以應該要重定向到有錯誤的上一頁。
因此,將store方法修改如下:
現在,在登入頁面的blade檔案中使用以下程式碼,這將列印錯誤。根據需要修改設計或其他內容