php - 使用 session 在登录表单上显示错误的问题

标签 php laravel authentication session

我在 Laravel 中有登录表单,但我无法在我的电子邮件和密码字段中显示错误。我制作了验证器,其中有错误消息,我将其放入 session 中并在 GET/login 上将其重定向。我需要有关如何从 session 中读取这些值并将它们作为参数返回到 Blade 中然后能够显示电子邮件和密码的错误消息的帮助。目前验证有效,但它不显示任何消息,它只重定向回登录页面。任何帮助表示赞赏。这是我的代码。

网络.php

Route::post('/login', 'Auth\LoginController@login')->name('login');

登录 Controller

public function showLoginForm(Request $request)
{
    $session = $request->session()->get('data');

    return view('auth.login', compact('session'));
}

public function login(Request $request)
{
    $rules = array(
        'email'    => 'required|email', 
        'password' => 'required|alphaNum|min:3'
    );

    $validator = Validator::make($request->all(), $rules);

    if ($validator->fails()) {
        $request->session()->put('data', $request->input());
        return redirect()->intended('login')
            ->withErrors($validator)
            ->withInput($request->session()->put('data', $request->input()));
    } else {
        $userData = array(
            'email'     => $request->get('email'),
            'password'  => $request->get('password')
        );
    }
    
    if (Auth::attempt($userData)) {
        return redirect()->intended('dashboard');
    } else {        
        redirect()->intended('login');
    }
}

登录 Blade

<div class="login-page">
        <div class="login-box">
            <div class="card mb-0">
                <div class="card-body login-card-body">
                    <p class="login-box-msg font-weight-bold">Sign in to start your session</p>
                    <form method="POST" class="mb-4" action="{{route('login') }}">
                        @csrf
                        <div class="input-group mb-3">
                            <input id="email" type="email" placeholder="Email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" autocomplete="email" autofocus>
                            <div class="input-group-append">
                                <div class="input-group-text">
                                    <span class="fas fa-user"></span>
                                </div>
                            </div>
                            @error('email')
                            <span class="invalid-feedback" role="alert">
                                <strong>{{ $message }}</strong>
                            </span>
                            @enderror
                        </div>
                        <div class="input-group mb-3">
                            <input id="password" type="password" placeholder="Password" class="form-control @error('password') is-invalid @enderror" name="password" autocomplete="current-password">
                            <div class="input-group-append">
                                <div class="input-group-text">
                                    <span class="fas fa-eye-slash cursor-pointer" style="display: none" onclick="showPassword()"></span>
                                    <span class="fas fa-eye cursor-pointer" onclick="showPassword()"></span>
                                </div>
                            </div>
                            @error('password')
                            <span class="invalid-feedback" role="alert">
                                <strong>{{ $message }}</strong>
                            </span>
                            @enderror
                        </div>
                        <div class="float-right">
                            <button type="submit" class="btn btn-primary btn-block font-weight-bold">Sign In</button>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </div>

最佳答案

您必须调用 ->withErrors($validator->errors())。这将返回正确的 MessageBag。否则,您将返回一个 Validator 实例。 之后,您可以按预期使用 $errors 变量或 @error 标记。

@编辑 代替 inteded() 使用 route()back()

关于php - 使用 session 在登录表单上显示错误的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63301737/

相关文章:

javascript - firebase.auth().onAuthStateChanged 不工作

Python:如何登录 Youtube

php - 使用 imagettftext 时填充矩形而不是文本

javascript - 在 PHP 包含的 header 上更改 CSS

php - 实现 PHP/MySQL 事务锁定机制的正确方法是什么

postgresql - 如何在 laravel 5.2 中通过迁移继承 postgresql?

php - Laravel 传递参数

php - Mysql请求在插入问题上创建多条记录

laravel - 为什么 Laravel 5.1 删除了默认的身份验证 View ?

authentication - 网站SSL认证