Создавать аутентификацию без пароля, используя только имя пользователя

Возможно ли установить Devise для аутентификации без пароля?

Это приложение для интрасети. Для того, чтобы подключиться к нему, вы должны быть в VPN в первую очередь, плюс приложение только позволяет видеть статус заказов и историю, а не предоставлять какую-либо информацию. Я думаю, похоже на веб-сайт Fedex или UPS tracking, но позволяет пользователю видеть всю учетную запись с дополнительной защитой VPN-окна, которую клиент получает от нас.

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

2 ответа

Не очень элегантное решение (которое не требует модификации Devise): используйте пароль по умолчанию, который идентичен для всех пользователей

Используйте обратный вызов before_validation для установки user.password и user.password_confirmation значения по умолчанию (например, password).

Сгенерируйте представления разработки с помощью rails generate devise:views

Измените форму входа, чтобы добавить поле скрытого пароля с вашим значением пароля по умолчанию.

Как я уже сказал, не изящно, но он должен делать трюк без необходимости копаться внутри внутренних частей.

Более элегантное решение:

Создайте проект Devise на GitHub и приспособите https://github.com/plataformatec/devise/blob/master/lib/devise/strategies/database_authenticatable.rb к вашим потребностям

Затем вы можете указать свою вилку в Gemfile.


В этом случае я предпочитаю monkey-patch Devise::Strategies::Authenticatable вместо того, чтобы развернуть весь репозиторий для создания одной строки.

Devise::Strategies::Authenticatable.class_eval do
 private
 def valid_password?
 true
 end
end

Просто поместите его в файл инициализатора или в конец инициализатора devise.rb (я предпочитаю это, потому что он немного похож на дополнительную конфигурацию).

Чтобы объяснить, исправленный здесь valid_password? обычно возвращает password.present? и используется Devise::Strategies::DatabaseAuthenticatable в качестве начальной проверки пароля перед фактической проверкой его на базу данных. Поэтому это изменит поведение, когда пароль не будет предоставлен.

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Это работает до сих пор для меня, но не полностью протестировано, поэтому используйте на свой страх и риск.

licensed under cc by-sa 3.0 with attribution.