Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我想在用户无法在laravel 5中分别登录用户名和密码时显示一条特定消息_Php_Laravel_Login - Fatal编程技术网

Php 我想在用户无法在laravel 5中分别登录用户名和密码时显示一条特定消息

Php 我想在用户无法在laravel 5中分别登录用户名和密码时显示一条特定消息,php,laravel,login,Php,Laravel,Login,我使用的是laravel登录api 我想为未能登录的用户显示一条消息,无论是用户名不正确还是密码正确 我查看了AuthenticatesUsers.php,有一个方法负责返回一条失败的登录消息,名为sendFailedLoginResponse,我对它进行了编辑,以便它可以执行我想要的操作,这就是我的代码 protected function sendFailedLoginResponse(Request $request) { $inputemail = $request->i

我使用的是laravel登录api

我想为未能登录的用户显示一条消息,无论是用户名不正确还是密码正确

我查看了AuthenticatesUsers.php,有一个方法负责返回一条失败的登录消息,名为sendFailedLoginResponse,我对它进行了编辑,以便它可以执行我想要的操作,这就是我的代码

protected function sendFailedLoginResponse(Request $request)
{

    $inputemail = $request->input('email');
    $user = User::where('email', $inputemail)->first();

    if($user == '') {
        throw ValidationException::withMessages([

            $this->username() => [trans('auth.usernameWrong')],
        ]);
    } else {
        throw ValidationException::withMessages([
            'password' => [trans('auth.passwordWrong')],
        ]);
    }
}
我知道还有比这更好的方法,因为我双重检查了用户名,第一个是laravel检查,第二个是我的查询检查


我是laravel的新手,我想知道如何正确操作。

您可以使用
Hash::check()
方法检查密码:

$user = User::where('email', $request->email)->first();

if (is_null($user)) {
    // There is no user
} elseif (!Hash::check($request->password, $user->password) {
    // Password is wrong
}
试试这个

protected function sendFailedLoginResponse(Request $request)
{

       // Load user from database
      $user = \App\User::where($this->username(), $request->{$this->username()})->first();

     if(!Hash::check($request->password, $user->password) {
           throw ValidationException::withMessages([

          $this->username() => [trans('auth.passwordWrong')],
       ]);
     } elseif($!user->exists){
         throw ValidationException::withMessages([
           'password' => [trans('auth.usernameWrong')],
      ]);
    }
}

使用
Hash::check()
方法检查密码

好的,但我仍在调用一个查询来检查用户电子邮件是否有其他方法可以在不重复检查用户名和密码的情况下执行此操作?@loaymansour这只是一个查询来获取电子邮件和密码。没有查询就不可能从数据库中获取数据。如果您之前在同一请求中已经执行了相同的查询,只需将用户实例传递到一个方法中,您可以在该方法中检查电子邮件和密码。是的,我知道,但我想知道是否还有其他方法从根本上说:为什么不只跟踪堆栈到
AuthenticateUser()
,然后将查询推送到那里?为了进行身份验证,在发送请求之前,它不应该在没有附加用户名和密码(有或没有salt)和编码为字符串的情况下传递任何用户名和密码……因此,如果没有单独的查询,您将无法获得所需的内容(最初2个用于分别从用户表中检查用户和传递,或者API查询后跟另一个用于检查电子邮件或传递,就像您所做的那样)