Они оба работают, используя bcrypt для генерации соленого хэша пароля, с той лишь разницей, что devise (по умолчанию) использует более высокую стоимость для хэша (то есть потребуется больше циклов ЦП для его перебора), ноКонечно, вы могли бы легко добавить это к коду Railscast, что примерно эквивалентно в этом отношении.
Версия Railscast, похоже, уязвима для временных атак, так как простое выполнение == не даст вам постоянного сравнения времениоперация.В двух словах, временная атака работает, потому что пароль, в котором хэш был полностью неверным, для отклонения == потребует меньше времени, чем пароль, в котором первая половина байтов была правильной (и поэтому == пришлось учитывать больше байтов перед отправкой).Может показаться, что любое такое различие будет стерто шумом из-за изменений в задержке сети и т. Д., Но люди применяют реальные атаки для восстановления ключей, используя эти подходы.
Вы, очевидно, могли бы позаимствовать бит безопасного сравнения из devise, но это показывает, что существуют неочевидные проблемы.
Очевидно, что разработка дает вам гораздо больше, чем просто аутентификация!