验证::尝试[Laravel]不能很好地工作,,它总是返回false [英] Auth::attempt [Laravel] doesn't work well,, It's always return false

查看:248
本文介绍了验证::尝试[Laravel]不能很好地工作,,它总是返回false的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

每一次我尝试测试我的TESTLOGIN功能时它返回false,我的投入是否uncorrect [不存储在数据库]或不正确[存储在我的数据库] ...

auth.phph正确的,['模型'=>'用户'和配置的;&安培; '表'=>'用户']

下面请任何帮助:)

公共职能TESTLOGIN()
    {

  $数据=输入::所有(); //获取与POST请求输入
    $ UNameOrEmail = $数据['UnameOrEmail'];
    $密码= $数据['密码'];    如果(filter_var($ UNameOrEmail,FILTER_VALIDATE_EMAIL)){//检查输入电子邮件或其他(再考虑它作为用户名)        $验证=验证::使(//验证用于电子邮件
            阵列(
                电子邮件=> $ UNameOrEmail,
                '密码'=> $的密码,
            )
            阵列(
                电子邮件=> 需要|电子邮件|存在:用户,电子邮件',
                '密码'=> 需要|分:8'
            )
        );        如果(用$ validator->失败()){//如果电子邮件验证是错误的返回验证消息
            $消息=用$ validator->的消息();
            返回$消息;
        }
        其他还有//商店电子邮件和放大器;密码阵列
            $ USER =阵列(
                电子邮件=> $ UNameOrEmail,
                '密码'=>哈希::彩妆($密码)
            );    }    其他{
        $验证=验证::彩妆(//检查用户名验证
            阵列(
                'USER_NAME'=> $ UNameOrEmail,
                '密码'=> $的密码,
            )
            阵列(
                '密码'=> 需要|分:8',
                'USER_NAME'=> 需要| alpha_dash |之间:4,16
            )
        );        如果(用$ validator->失败()){//如果用户名验证是错误的返回验证消息
            $消息=用$ validator->的消息();
            返回$消息;
        }其他
            $ USER =阵列(//别的店用户名和放大器;密码阵列
                'USER_NAME'=> $ UNameOrEmail,
                '密码'=>哈希::彩妆($密码)
            );    }
    如果(AUTH ::尝试($用户)){//这是错误        回声成功登录;
    }
    其他
    {
        呼应有些东西出问题; //在任何情况下,它JUM这里:(
    }}


解决方案

您不能将它传递给验证::尝试前散列密码。只需通过简单的密码:

  $ USER =阵列(
    'USER_NAME'=> $ UNameOrEmail,
    '密码'=> $密码
);

另外,还要确保您存储密码的哈希数据库和密码字段的 60个字符。否则,哈希将被截断,这是行不通的。

every time I try to Test my TestLogin function it return false, whether my inputs were uncorrect[not stored in DataBase] or correct [that stored in my DataBase] ...

config of auth.phph correct that [ 'model' => 'User'&& 'table' => 'users']

Please any help here :)

public function TestLogin() {

    $data = Input::All();                     //Get Input with POST Request
    $UNameOrEmail = $data['UnameOrEmail'];
    $password = $data['Password'];

    if(filter_var($UNameOrEmail, FILTER_VALIDATE_EMAIL)) {      //Check if Input Is Email or else(then consider it as user name)

        $validator = Validator::make(           //Validation for Email
            array(
                'email' => $UNameOrEmail,
                'password' => $password,
            ),
            array(
                'email' => 'required|email|exists:users,email',
                'password' => 'required|min:8'
            )
        );

        if ($validator->fails()) { //If Email Validation was wrong return validation message
            $messages = $validator->messages();
            return $messages;
        }
        else                           //else store Email&Password in Array
            $user = array(
                'email' => $UNameOrEmail,
                'password' => Hash::make($password)
            );

    }

    else {
        $validator = Validator::make(    //Check User Name Validation
            array(
                'user_name' => $UNameOrEmail,
                'password' => $password,
            ),
            array(
                'password' => 'required|min:8',
                'user_name' => 'required|alpha_dash|between:4,16'
            )
        );

        if ($validator->fails()) {                  //If User Name Validation was wrong return validation message
            $messages = $validator->messages();
            return $messages;
        } else
            $user = array(                           //else store UserName&Password in Array
                'user_name' => $UNameOrEmail,
                'password' => Hash::make($password)
            );

    }


    if (Auth::attempt($user)) {             //Here's the Error

        echo 'Successfully logged in';
    }
    else
    {
        echo 'Some thing go wrong';             //In any case it jum here :(
    }

}

解决方案

You must not hash the password before passing it to Auth::attempt. Just pass the plain password:

$user = array(                           
    'user_name' => $UNameOrEmail,
    'password' => $password
);

Also make sure that you store a hash of the password in the database and the password field is 60 characters long. Otherwise the hash will be truncated and it won't work.

这篇关于验证::尝试[Laravel]不能很好地工作,,它总是返回false的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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