Rails разрабатывает старых пользователей из CakePHP - PullRequest
2 голосов
/ 16 января 2012

Я недавно заставил Devise работать. Новые пользователи, вход, регистрация, выход и т. Д. И т. Д. Просто отлично. Старые пользователи, однако, имеют проблемы. Я получил его до такой степени, что я получаю 401 несанкционированный, который мне кажется, что хэш просто неправильно создается при входе в систему и, конечно, не совпадает правильно.

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

class User < ActiveRecord::Base
  require "digest/sha1"
  # Include default devise modules. Others available are:
  # :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable, :encryptable, :encryptor => :old_cakephp_auth

  # Setup accessible (or protected) attributes for your model
  attr_accessible :email, :password, :password_confirmation, :remember_me
  has_many :events
end

Cakephp использует sha1, но я не знаю специфики того, как он работает. Это явно не работает, поэтому я здесь:

require "digest/sha1"

module Devise
  module Encryptors
    class OldCakephpAuth < Base
      def self.digest(password, stretches, salt, pepper)
        Digest::SHA1.hexdigest("#{salt}#{password}")
      end
    end
  end
end

Я получил это от того, как добавить пример специального шифратора. У них было это:

Digest::SHA1.hexdigest("--#{salt}--#{password}--")

Это тоже не сработало. У кого-нибудь есть идеи?

1 Ответ

2 голосов
/ 16 января 2012

Я видел вариацию этого в создании своего собственного шифровщика вики.Я не знаю, как я этого раньше не видел.Возможно, кто-то недавно обновил его.

Поместите следующее в вашу модель пользователя.Он должен перезаписать действительный пароль из устройства devise:

  def valid_password?(password)
    return false if encrypted_password.blank?
    Devise.secure_compare(Digest::SHA1.hexdigest(self.password_salt+password), self.encrypted_password)
  end

Необходимо убедиться, что соль для пароля, которую вы использовали в торте, была добавлена ​​во все строки старого пользователя.Вам также необходимо изменить пароль на зашифрованный пароль в соответствии с инструкциями devise.

Мне кажется, что мне может понадобиться добавить способ шифрования из пользовательской модели также для новых пользователей.Или, возможно, пользовательский шифратор, который я создал, обрабатывает этот аспект.

...