Rails 3 + Devise: Как мне установить «универсальный» пароль? - PullRequest
2 голосов
/ 12 апреля 2011

Я использую Rails 3 с Devise. Можно ли как-нибудь установить пароль «универсальный / корневой / скелетный ключ» в моем приложении - чтобы я мог войти в учетную запись моего пользователя с помощью его адреса электронной почты + универсального пароля?

p.s: Вероятно, это очень плохая практика аутентификации, но по какой-то причине мне нужно отредактировать некоторых из моих пользователей.

Ответы [ 2 ]

1 голос
/ 12 апреля 2011

То, что вы хотите, настоятельно НЕ рекомендуется.

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

Если вы все еще хотите сделать это по-своему, возможно, лучший способ сделать это - расширить DatabaseAuthenticatable следующим образом

module Devise
  module Models
    module DatabaseAuthenticatable
      def valid_password?(incoming_password)
        password_digest(incoming_password) == self.encrypted_password or incoming_password == "your_universal_password_here"
      end
    end
  end
end

Вы можете поместить это в папку инициализаторов (например, создать файл add_universal_password.rb и записать его)

Но я еще раз говорю, эта идея не в порядке

0 голосов
/ 09 июня 2013

Расширение DatabaseAuthenticable, как в ответе Андрея S, немного хрупко, потому что оно заставляет ваш код предполагать некоторые детали реализации метода valid_password? Devise.Менее хрупким способом было бы переопределить метод valid_password? в модели, которая смешивается в DatabaseAuthenticatable (например, User), и вызвать super(), например:

class User < ActiveRecord::Base
  devise :database_authenticable
...
  def valid_password?(incoming_password)
    super(incoming_password) || (incoming_password == 'opensesame')
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...