J'ai moi-même passé d'Authlogic à Devise récemment et je n'ai trouvé aucun article. Cependant, dans le cas le plus simple, une fois que vous avez supprimé tous vos fichiers user_session et autres codes liés à authlogic, le travail principal consiste à convertir votre ancienne table d'utilisateurs au format attendu par l'outil.
Ma vieille table ressemblait à ceci:
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)
et je déterminé que le tableau devrait contenir au moins les informations suivantes pour concevoir (avec de nombreuses fonctionnalités en option est activée):
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 |
J'ai donc défini une classe activeecord active dans la classe de migration
class ConversionUser < ActiveRecord::Base
set_table_name "users"
end
et la n est ici le code de migration « vers le haut » je me suis retrouvé à l'aide (avec 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
Notez que ici j'ai converti une colonne de mot de passe ordinaire dans une colonne cryptée bcrypt-pour Devise - si vous avez utilisé mots de passe chiffrés avec Authlogic, alors vous voudrez probablement simplement renommer la colonne (si nécessaire) et choisir le bon module de chiffrement dans config/initializers/devise.rb
.
Pour référence, le « mettre au point » clause dans mon modèle utilisateur ressemble à ceci:
devise :database_authenticatable, :registerable, :recoverable,
:rememberable, :trackable, :validatable, :confirmable, :lockable,
:timeoutable, :authentication_keys => [ :login ]
Notez que l'annulation :authentication_keys
comme cela pour que les utilisateurs se connectent avec leur connexion plutôt que leur adresse e-mail me nécessaire de modifier certains des vues concevoir: rails generate devise:views
, puis modifier les fichiers.
Espérons que cela aide un peu. Bonne chance!
Documentation complète pour migrer de authlogic à concevoir. https://sunilsharma3639.wordpress.com/2014/06/11/rails-authentication-authlogic-to-devise/ – sunil