Laravel中验证用户身份和显示验证消息时遇到问题
P粉071626364
P粉071626364 2023-09-04 21:41:24
[PHP讨论组]
<p>我在Laravel中遇到了用户认证和显示验证消息的困难。当尝试登录时,用户无法正确通过身份验证,并且验证错误消息也没有显示。</p> <p>我按照官方的Laravel文档进行了认证和验证,但即使在人工智能的帮助下,我也没有得到预期的结果。以下是我的一些代码片段:</p> <pre class="brush:php;toolbar:false;">public function store(Request $request) { $request-&gt;validate([ 'email' =&gt; 'required|email', 'password' =&gt; 'required', ]); $credentials = $request-&gt;only('email', 'password'); if (auth()-&gt;attempt($credentials)) { $user = auth()-&gt;user(); $request-&gt;session()-&gt;put('user', $user); return redirect()-&gt;route('home'); } throw ValidationException::withMessages([ 'email' =&gt; 'Invalid email or password.', ]); }</pre> <p>这是HTML代码:</p> <pre class="brush:php;toolbar:false;">&lt;!DOCTYPE html&gt; &lt;html lang=&quot;en&quot;&gt; &lt;head&gt; &lt;meta charset=&quot;UTF-8&quot;&gt; &lt;title&gt;Login&lt;/title&gt; &lt;/head&gt; &lt;body&gt; &lt;h1&gt;Login&lt;/h1&gt; &lt;form action=&quot;/login&quot; method=&quot;post&quot;&gt; @csrf &lt;input type=&quot;email&quot; name=&quot;email&quot; placeholder=&quot;Email&quot;&gt; &lt;input type=&quot;password&quot; name=&quot;password&quot; placeholder=&quot;Password&quot;&gt; &lt;input type=&quot;submit&quot; value=&quot;Login&quot;&gt; &lt;/form&gt; &lt;/body&gt; &lt;/html&gt;</pre> <p>最后,是路由:</p> <pre class="brush:php;toolbar:false;">&lt;?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'])-&gt;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'])-&gt;name('users.destroy'); Route::get('/home', [HomeController::class, 'index'])-&gt;name('home'); Route::get('/login', [LoginController::class, 'index'])-&gt;name('login'); Route::post('/login', [LoginController::class, 'store']); ?&gt;</pre> <p>我尝试使用登录表单中提供的凭据对用户进行身份验证。如果凭据正确,我期望Laravel能够正确地对用户进行身份验证。我还在<code>LoginController</code>的<code>store()</code>方法中使用<code>$request-&gt;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
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号