作者::try[Laravel]dons';工作不好;s总是返回false


Auth::attempt [Laravel] doesn't work well,, It's always return false

每次我尝试测试我的TestLogin函数时,它都会返回false,无论我的输入是不正确的[未存储在数据库中]还是正确的[存储在我的数据库中]。。。

auth.phph的config更正了['model'=>'User'&'table'=>'users']

请在这里提供帮助:)

公共函数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 :(
    }
}

在将密码传递给Auth::attempt之前,不得对其进行哈希运算。只需传递简单密码:

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

此外,请确保在数据库中存储密码的哈希,并且密码字段的长度为60个字符。否则,散列将被截断,它将无法工作。

我可以看到您使用的是Input::All()(大写A),而不是Input::all()

执行dd(Input::All());以查看它返回的内容。

发现了问题(我认为):你应该NOT哈希你的密码,因为Auth会自动执行。简而言之,您手动对其进行散列,然后Auth再次对其进行哈希,这就是为什么密码永远不会与DB表中存储的内容匹配的原因:)