登录失败怎么显示错误信息?

时间:2019-06-18 12:38:47

标签: laravel laravel-5 laravel-form

我使用以下命令创建身份验证系统:

php artisan make:auth

工作正常。但是,当我尝试自定义设计和其他内容时,一切对我来说似乎都是混乱的。即:当我尝试使用错误的凭据时,则无法显示类似``无效的用户名/密码''的消息。我检查了Auth文件夹中的所有控制器,但是那里没有详细的代码。我的要求非常简单:我只想从控制器传递错误消息,以使用定制设计的HTML模板进行查看和显示。这是我的登录表格:

@extends('layouts.login')

@section('content')
    <div class="content">
        <!-- BEGIN LOGIN FORM -->
        <form class="login-form" method="POST" action="{{ route('login') }}">
            @csrf

            <h3 class="form-title">Login to your account</h3>
             CUSTOM_ERROR_MESSAGE_IF_LOGIN_FAILED
            <div class="alert alert-danger display-hide">
                <button class="close" data-close="alert"></button>
                <span>
            Enter any username and password. </span>
            </div>
            <div class="form-group">
                <!--ie8, ie9 does not support html5 placeholder, so we just show field title for that-->
                <label class="control-label visible-ie8 visible-ie9">Username</label>
                <div class="input-icon">
                    <i class="fa fa-user"></i>
                    <!-- <input class="form-control placeholder-no-fix" type="text" autocomplete="off" placeholder="Username" name="username"/> -->
                    <input id="email" type="email" class="form-control placeholder-no-fix" name="email" value="{{ old('email') }}" required autocomplete="email" autofocus>
                </div>
            </div>
            <div class="form-group">
                <label class="control-label visible-ie8 visible-ie9">Password</label>
                <div class="input-icon">
                    <i class="fa fa-lock"></i>
                    <!-- <input class="form-control placeholder-no-fix" type="password" autocomplete="off" placeholder="Password" name="password"/> -->
                    <input id="password" type="password" class="form-control placeholder-no-fix" name="password" required autocomplete="current-password">

                </div>
            </div>
            <div class="form-actions">
                <label class="checkbox">
                    <!-- <input type="checkbox" name="remember" value="1"/>  -->
                    <input class="form-check-input" type="checkbox" name="remember" id="remember" {{ old('remember') ? 'checked' : '' }}>
                    Remember me </label>

                <button type="submit" class="btn blue pull-right">
                    Login <i class="m-icon-swapright m-icon-white"></i>
                </button>
            </div>

            <div class="forget-password">
                <h4>Forgot your password ?</h4>
                <p>
                    no worries, click <a href="{{ route('password.request') }}" >
                        here </a>
                    to reset your password.
                </p>
            </div>
            <div class="create-account">
                <p>
                    Don't have an account yet ?&nbsp; <a href="javascript:;" id="register-btn">
                        Create an account </a>
                </p>
            </div>
        </form>
        <!-- END LOGIN FORM -->

    </div>

@endsection

如何显示CUSTOM_ERROR_MESSAGE_IF_LOGIN_FAILED?

2 个答案:

答案 0 :(得分:2)

首先,请相信我,我们到过您现在的地方。在学习新框架及其工作原理时,这令人沮丧。

一个建议就是彻底地阅读文档,关于Laravel,没有什么是找不到的。至少,您通常不需要任何基础知识。

关于您的问题,您说:

  

我只想从控制器传递错误消息以查看并显示它   我的自定义设计的HTML模板。

因此,我将做出一个大胆的猜测,说您是在自行处理登录过程,而不是使用内置的Laravel功能。

如果我错了,而您正在使用laravel登录功能中的build,那么您需要做的就是:

情况1:当您使用Laravel登录中的构建功能

@if ($errors->has('email'))
    <span class="invalid-feedback">
        <strong>{{ $errors->first('email') }}</strong>
    </span>
@endif

当输入错误的凭据并尝试登录时,Laravel会使用键“电子邮件”返回错误,因此只要您愿意,就可以使用$errors->first('email')打印消息并对其进行样式设置。

现在,如果我是对的,并且您正在使用自定义登录方法:

情况2:使用自定义登录功能时

在您的控制器中,您可以像这样自定义消息:

$messages = [
    'email.required' => 'Email is required!',
    'password.required' => 'Password is required!'
];

$validatedData = $request->validate([
    'email' => 'required|email',
    'password' => 'required|string',
], $messages);

当然,这只是一个示例,您可以进行各种验证和各自的自定义消息。如果要使用验证的内置错误消息,则不要提供像这样的消息数组:

$validatedData = $request->validate([
    'email' => 'required|email',
    'password' => 'required|string',
]);

validate()上使用$request方法时,如果验证失败,则Laravel默认会向刀片返回有效的错误响应,该响应将具有与您的请求变量名称相同的键,并具有与错误消息,您可以轻松地访问它们,与情况1相同:

@if ($errors->has('email'))
    <span class="invalid-feedback">
        <strong>{{ $errors->first('email') }}</strong>
    </span>
@endif

您已设置好。 最终,也许除了验证以下用例之外,您还希望从控制器中返回一些自定义错误:

情况3:当您使用自定义登录功能并想返回除验证之外的一些自定义错误消息

在控制器内部使用withErrors()方法:

return Redirect::back()->withErrors(
    [
        'email' => 'Snap! you are done!'
    ]
);

您可能已经猜到了,在视图内部显示此错误与以前完全相同:

@if ($errors->has('email'))
    <span class="invalid-feedback">
        <strong>{{ $errors->first('email') }}</strong>
    </span>
@endif

我希望对您有帮助

快乐编码:)

答案 1 :(得分:0)

您可以使用以下命令输出错误消息:

@if(count($errors) > 0)
 @foreach( $errors->all() as $message )
  <div class="alert alert-danger display-hide">
   <button class="close" data-close="alert"></button>
   <span>{{ $message }}</span>
  </div>
 @endforeach
@endif

如果您有自定义路由,则需要从控制器重定向到登录页面并传递错误:

$errors = ['ur errors'];
return redirect()->back()->withErrors($errors);