2014-09-04 2 views
0

Я делал проекты с Auth на Linux и Windows и никогда не сталкивался с проблемами хэширования. Основной смысл этого заключается в том, что пароли не передают метод Hash :: check с настройкой пользователя по умолчанию. Я посмотрел на большинство ответов на SO, и они являются типичными пользователями, не понимающими, что Hash каждый раз меняет значение, или что для Hash :: check требуется простое значение, а затем хешированное значение от пользователя в db. Поначалу это был отказ от попытки Auth ::, но дальнейшая перспектива кажется проблемой проверки хэша. Я уже прочитал и перечитал Laravel Authentication, чтобы убедиться, что я не пропустил что-то вроде обеспечения того, чтобы поле пароля db было слишком коротким (для максимальной длины 256).Hash :: check Always Failing

Настройка

пользователя Модель

class User extends Eloquent implements UserInterface, RemindableInterface { 
    protected $fillable = array(
    'email', 
    'password', 
); 

    protected $guarded = array(
    'id', 
); 

    //add the UserInterface/RemindableInterface methods here 
} 

Seed

User::create(array(//could also do DB insert way.. 
    'id'=>1, 
    'email' => '[email protected]', 
    'password' => Hash::make('admin'), 
)); 

//User created with correct hash no problem. 

Test Post Route

//some other validation above this. Email/password correctly passed from form 
$email = Input::get('email'); 
$password = Input::get('password'); 

$user = User::where('email', $email)->first(); 
//gets user with hashed pass fine 
$sucess = Hash::check($password, $user->password); //could do $user->getAuthPassword() as well 
//always false.. 
//initially tried Auth::attempt getting the same results because of the internal Hash::check 

Пробовал

  • Я прошел через проверку вплоть до сравнения дб хэша с солью против вставленного простого прохода, который не удался после сравнения соли.
  • Я попытался создать свежий пользователя на знак попасть в маршруте (ниже) и пытаюсь этими учетными данными в форме, и он до сих пор не подписал бы в (Фигурном это могло бы быть проблемой семян.)

    $ newUser = new Пользователь (массив ( 'email' => '[email protected]', 'password' => Hash :: make ('test') )); $ newUser-> save();

В этот момент, казалось бы, странным password_verify/password_hash вопрос под капотом я нахожусь не догадывались.

+0

Что произойдет, если вы используете Hash: check ('admin', Hash :: make ('admin')) '? – Rob

+0

Работает отлично (возвращает true). Одна из тех ситуаций, которые я ожидал провалить после всего этого, но все равно не могу понять, что я боюсь. –

+0

Тогда, скорее всего, 'Input :: get ('password')' не так, как вы думаете, или '$ user-> password'. У вас есть уникальный индекс по электронной почте? Нет дубликатов писем с разными паролями? У вас есть «создающий» слушатель в модели, который снова вводит пароль? – Rob

ответ

2

Вызывается метод setPasswordAttribute по умолчанию, который задан в пользовательской модели, которая запускается для любого созданного или созданного пользователя через стартовые наполнители.

Снимите:

public function setPasswordAttribute($value) 
{ 
    $this->attributes['password'] = Hash::make($value); 
} 

И вуаля она прекрасно работает.