每次我尝试测试我的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表中存储的内容匹配的原因:)