2013-04-14 5 views
2

Это кажется очень простым, но я действительно не могу понять это. Я хочу использовать Auth::attempt($credentials) в Laravel 4, но с паролем, который уже был хэширован (поскольку это API). Он работает, когда я отправляю неуправляемый пароль, но я не понимаю, как указать Auth на «не хэш» заданный пароль.Использование Laravel auth :: попытка с хешированным паролем

Быстрый «демо»

Что работает:

Auth::attempt([Request::getUser(), Request::getPassword()]); 

curl --user username:notHashedPassword localhost:8000/api/ 

Что не работает:

Auth::attempt([Request::getUser(), Request::getPassword()]); 

curl --user username:$2y$08$xo7HpxFyeF2UKHOYs/e localhost:8000/api/ 

Есть ли какие-либо аргументы, которые я мог бы перейти к Auth::attempt() что бы сказать ему, чтобы использовать это как есть, а не пытаться перефразировать его (как я думаю, это так)?

+0

Просматривая код: либо определите собственную реализацию 'UserProviderInterface', либо если вы хотите использовать свой встроенный поставщик db/eloquent, зарегистрируйте не-хэш-класс, который реализует' HasherInterface'. – Wrikken

ответ

1

Метод хеширования, используемый Laravel генерирует различный хэш-каждый раз (даже для одной и той же строки). Подробнее об этом можно узнать в Hashing for Laravel. Как вы можете прочитать, он не хеширует обе строки и не сравнивает их, вместо этого он использует неповрежденную строку для сравнения с хэшем.

Если вы действительно хотите это сделать, вам нужно будет реализовать собственный поставщик Auth и другой алгоритм хэширования, который позволит вам сравнить хэши.

Если вы обеспокоены безопасностью, вы должны рассмотреть HTTPS, чтобы безопасные данные (включая пароли) никогда не отправлялись простым текстом.

3

Вы можете войти пользователь вручную

$user = User::find($id); 

if ($user->password == Request::getPassword()) { 
    Auth::login($user->id); 
} 
+1

Невозможно сравнивать сгенерированные хэши, так как они различны каждый раз. См. Мой ответ на ссылку, объясняющую, почему они разные. –

2

Вы действительно не должны указывать пароль перед отправкой. Как вы собираетесь правильно вводить пароль до отправки его без соли? Если у вас есть доступ к соли перед отправкой пароля, то почему вы используете API?

Если вы обеспокоены безопасностью передачи не-хэшированного пароля, вы должны использовать SSL для обеспечения безопасной передачи данных.

Не считайте API каким-либо другим, а затем используйте веб-страницу, и вы не соляли пароли перед отправкой формы на веб-сайт, вместо этого, если вам нужен такой уровень безопасности, вы полагаетесь на https/SSL.

Смежные вопросы