Authlogicから考案への移行
-
27-09-2019 - |
質問
私は、以前私のサイト上で承認のためAuthlogicを実装しました。今、しかし、私の代わりに工夫を使用してに切り替えたい、と誰もがこれでの経験を持っている場合、私は思ったんだけど。おそらく、誰の件名にブログの記事を見たことある?
ありがとうございます。
解決
私自身は最近考案するAuthlogicから切り替えても、任意の記事を見つけることができませんでした。すべてのあなたのuser_sessionおよびその他のauthlogic関連のコードを捨ててきたしかし、一度簡単な場合には、作業の主な作品は、工夫が期待する形式に古いusersテーブルに変換されます。
は私の古いテーブルには、このように見えました
Column | Type | Modifiers
-------------------+--------------------------+----------------------------------------------------
id | integer | not null default nextval('users_id_seq'::regclass)
login | character varying(256) | not null
password | character varying(64) | not null
created_at | timestamp with time zone | not null
updated_at | timestamp with time zone | not null
persistence_token | character varying(255) | not null
Indexes:
"users_pkey" PRIMARY KEY, btree (id)
"index_users_on_persistence_token" UNIQUE, btree (persistence_token)
"users_login_key" UNIQUE, btree (login)
私は、テーブルには、少なくとも(有効になって多くのオプション機能付き)工夫のために、以下の情報が含まれていなければならないだろうと判断します:
id | integer | not null default nextval('contributors_id_seq'::regclass)
email | character varying(255) | not null default ''::character varying
encrypted_password | character varying(128) | not null default ''::character varying
password_salt | character varying(255) | not null default ''::character varying
confirmation_token | character varying(255) |
confirmed_at | timestamp without time zone |
confirmation_sent_at | timestamp without time zone |
reset_password_token | character varying(255) |
remember_token | character varying(255) |
remember_created_at | timestamp without time zone |
sign_in_count | integer | default 0
current_sign_in_at | timestamp without time zone |
last_sign_in_at | timestamp without time zone |
current_sign_in_ip | character varying(255) |
last_sign_in_ip | character varying(255) |
failed_attempts | integer | default 0
unlock_token | character varying(255) |
locked_at | timestamp without time zone |
created_at | timestamp without time zone |
updated_at | timestamp without time zone |
だから私はマイグレーションクラスで飾り気のないActiveRecordのクラスを定義します。
class ConversionUser < ActiveRecord::Base
set_table_name "users"
end
は、その後、ここで私は(PostgreSQLので)使用して終了「アップ」移行コードです:
add_column :users, :email, :string, :limit => 255
execute "UPDATE users SET email = login || '@somedomain.net'"
execute "ALTER TABLE users ALTER email SET NOT NULL"
add_column :users, :encrypted_password, :string, :limit => 128
add_column :users, :password_salt, :string, :limit => 255
require 'devise/encryptors/bcrypt'
ConversionUser.find(:all).each do |u|
password_salt = Devise::Encryptors::Bcrypt.salt(Devise.stretches)
u.update_attributes!(:password_salt => password_salt,
:encrypted_password => Devise::Encryptors::Bcrypt.digest(u.password, Devise.stretches, password_salt, Devise.pepper))
end
add_column :users, :confirmation_token, :string, :limit => 255
add_column :users, :confirmed_at, :timestamp
add_column :users, :confirmation_sent_at, :timestamp
execute "UPDATE users SET confirmed_at = created_at, confirmation_sent_at = created_at"
add_column :users, :reset_password_token, :string, :limit => 255
add_column :users, :remember_token, :string, :limit => 255
add_column :users, :remember_created_at, :timestamp
add_column :users, :sign_in_count, :integer, :default => 0
add_column :users, :current_sign_in_at, :timestamp
add_column :users, :last_sign_in_at, :timestamp
add_column :users, :current_sign_in_ip, :string, :limit => 255
add_column :users, :last_sign_in_ip, :string, :limit => 255
add_column :users, :failed_attempts, :integer, :default => 0
add_column :users, :unlock_token, :string, :limit => 255
add_column :users, :locked_at, :timestamp
remove_column :users, :password
remove_column :users, :persistence_token
add_index :users, :email, :unique => true
add_index :users, :confirmation_token, :unique => true
add_index :users, :reset_password_token, :unique => true
add_index :users, :unlock_token, :unique => true
ここで私が考案用bcryptの暗号化カラム内にプレーンなパスワード列に変換したことを注 - Authlogicで暗号化されたパスワードを使用している場合、あなたはおそらくちょうど列(必要な場合)の名前を変更したいと思うし、 config/initializers/devise.rb
で正しい暗号化モジュールを選択します。
参考までに、このように私のUserモデルのルックスの「工夫」条項ます:
devise :database_authenticatable, :registerable, :recoverable,
:rememberable, :trackable, :validatable, :confirmable, :lockable,
:timeoutable, :authentication_keys => [ :login ]
。ファイルを編集し、:authentication_keys
:このようrails generate devise:views
をオーバーライドすることは彼らのログインではなく、自分のメールアドレスでのユーザーのサインが工夫ビューの一部を変更するために私に必要なので、ということを注
これは少しお役に立てば幸いです。幸運!
他のヒント
sanityincの答えは素晴らしいです!どうもありがとうございました!
しかし、私は暗号化されたパスワードでauthlogicの異なるバージョンを持っていたし、私の最後のアップの移行はします:
rename_column :users, :crypted_password, :encrypted_password
add_column :users, :confirmation_token, :string, :limit => 255
add_column :users, :confirmed_at, :timestamp
add_column :users, :confirmation_sent_at, :timestamp
execute "UPDATE users SET confirmed_at = created_at, confirmation_sent_at = created_at"
add_column :users, :reset_password_token, :string, :limit => 255
add_column :users, :remember_token, :string, :limit => 255
add_column :users, :remember_created_at, :timestamp
rename_column :users, :login_count, :sign_in_count
rename_column :users, :current_login_at, :current_sign_in_at
rename_column :users, :last_login_at, :last_sign_in_at
rename_column :users, :current_login_ip, :current_sign_in_ip
rename_column :users, :last_login_ip, :last_sign_in_ip
rename_column :users, :failed_login_count, :failed_attempts
add_column :users, :unlock_token, :string, :limit => 255
add_column :users, :locked_at, :timestamp
remove_column :users, :persistence_token
remove_column :users, :perishable_token
remove_column :users, :single_access_token
add_index :users, :email, :unique => true
add_index :users, :confirmation_token, :unique => true
add_index :users, :reset_password_token, :unique => true
add_index :users, :unlock_token, :unique => true
..そしてそれは、MySQLのために素晴らしい仕事ます。
はユーザーのログインは、追加「無効なハッシュ」エラー満たしている場合:Userモデルで暗号化可能に。 私が考案するauthlogicから移行してきました。私のデータベースはMySQLのです。
、devise.rb
設定でこれらを変更してみてください
config.stretches = 20
config.encryptor = :authlogic_sha512