login_engineをrestful_authenticationに移行する
railsが2.0になってしまった昨今、いつまでもlogin_engineを使っていると時代に取り残されそうなので、restful_authenticationへの移行を試みた。どうにか動き始めたので手順を公開。
まずはモデルを移行する。これには、db/migrateに以下のようなコードを入れておいて、rake db:migrateする。
class MigrateUsers < ActiveRecord::Migration def self.up rename_column("users", "salted_password", "crypted_password") add_column("users", "state", :string, {:null => :no, :default => 'passive'}) add_column("users", "remember_token", :string) add_column("users", "remember_token_expires_at", :datetime) add_column("users", "activation_code", :string, {:limit => 40}) add_column("users", "activated_at", :datetime) add_column("users", "deleted_at", :datetime) User.find(:all).each { |user| if user.deleted != 0 user.state = "deleted" user.deleted_at = user.delete_after elsif user.verified == 0 user.state = "pending" #user.activation_code = user.security_token else user.state = "active" end user.save } end def self.down raise ActiveRecord::IrreversibleMigration, "Can't recover" end end
ここで更に、login_engineとresful_authenticationでは、パスワードの暗号化の方法が違うので、app/model/user.rbを開いて、関数「self.encrypt」を以下のように修正する
修正前:
def self.encrypt(password, salt) Digest::SHA1.hexdigest("--#{salt}--#{password}--") end
修正後:
def self.encrypt(password, salt) systemsalt = "your-salt-here" spassword = Digest::SHA1.hexdigest("#{systemsalt}--#{password}--}")[0..39] Digest::SHA1.hexdigest("#{systemsalt}--#{salt}#{spassword}--}")[0..39] end
「systemsalt」となっている部分は、login_engineで
module LoginEngine config :salt, "your-salt-here" end
として設定していた文字列と同じものにすること。
私の環境では、これで以前のアカウントデータでログイン可能になった。