Auth :: попытка [Laravel] не работает хорошо, она всегда возвращает false

каждый раз, когда я пытаюсь проверить мою функцию TestLogin, она возвращает false, независимо от того, были ли мои входные данные неправильными [не сохранены в базе данных] или правильными [которые хранятся в моей базе данных] …

конфиг auth.phph исправить что [‘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 :(
}

}

0

Решение

Вы не должны хешировать пароль перед его передачей Auth::attempt, Просто передайте простой пароль:

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

Также убедитесь, что вы храните хэш пароля в базе данных и поле пароля Длина 60 символов. В противном случае хеш будет урезан и не будет работать.

0

Другие решения

Я вижу, что вы используете Input :: All () (заглавная A) вместо Input::all(),

Сделать dd(Input::All()); чтобы увидеть, что он возвращает.

Нашел проблему (думаю): ты должен НЕ Хэш-пароль, так как Auth делает это автоматически. Короче говоря, вы хэшируете его вручную, а затем Auth хэширует его снова, и поэтому пароль никогда не совпадает с тем, что хранится в таблице БД 🙂

0