搜尋

首頁  >  問答  >  主體

Laravel驗證使用者身分和顯示驗證訊息時遇到問題

<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粉071626364P粉071626364451 天前687

全部回覆(1)我來回復

  • P粉502608799

    P粉5026087992023-09-05 00:46:08

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

    因此,將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

    回覆
    0
  • 取消回覆