Laravel驗證使用者身分和顯示驗證訊息時遇到問題
P粉071626364
P粉071626364 2023-09-04 21:41:24
0
1
703
<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>
P粉071626364
P粉071626364

全部回覆(1)
P粉502608799

您最初驗證了電子郵件和密碼,這是很好的。登入失敗後,您拋出了一個異常,這就是為什麼它不會將您重新導向到登入頁面的原因。所以應該要重定向到有錯誤的上一頁。

因此,將store方法修改如下:

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' => '使用的电子邮件或密码无效。']);

}

現在,在登入頁面的blade檔案中使用以下程式碼,這將列印錯誤。根據需要修改設計或其他內容

@if($errors->any())
   <h4>{{$errors->first()}}</h4>
@endif
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板