使用会话在登录表单上显示错误的问题 [英] Problem with displaying errors on login form using sessions

查看:43
本文介绍了使用会话在登录表单上显示错误的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在Laravel中有登录表单,但在我的电子邮件和密码字段中显示错误时遇到了麻烦.我制作了验证器,其中包含该错误消息,并将其放在会话中并重定向到GET/login上.我需要有关如何从会话中读取这些值并将其作为参数返回到Blade中的信息的帮助,然后才能显示这些错误消息的电子邮件和密码.当前验证有效,但不显示任何消息,仅重定向回登录页面.任何帮助表示赞赏.这是我的代码.

I have login form in Laravel and I am having trouble displaying errors on my email and password fields. I made validator in which I have that error message and I put it in session and redirected it on GET /login. I need help on how to read those values from session and return them in blade as parameter and then to be able to display those error messages for email and password. Currently validation works but it displays no messages, it only redirects back to login page. Any help is appreciated. Here is my code.

web.php

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

LoginController

LoginController

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');
    }
}

登录刀片

<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 标记.

You will have to call ->withErrors($validator->errors()). This returns the correct MessageBag. Otherwise you are returning a Validator instance. Afterwards you can use the $errors variable or the @error tag as intended.

@edit插入 inteded()可以使用 route() back().

@edit insted of inteded() use route() or back().

这篇关于使用会话在登录表单上显示错误的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆