الهجرة من Authlogic إلى ابتكار
-
27-09-2019 - |
سؤال
لقد قمت سابقًا بتطبيق AuthLogic للترخيص على موقعي. ومع ذلك ، أرغب الآن في التبديل إلى استخدام Prepise بدلاً من ذلك ، وأتساءل عما إذا كان لدى أي شخص أي خبرة في هذا. ربما شاهد أي شخص منشور مدونة حول هذا الموضوع؟
شكرًا لك.
المحلول
أنا شخصياً تحولت من Authlogic إلى الاستنباط مؤخرًا ولم أجد أي مقالات أيضًا. ومع ذلك ، في الحالة البسيطة ، بمجرد إلقاء جميع user_session الخاص بك والرمز الآخر المتعلق بـ AuthLogic ، فإن العمل الرئيسي هو تحويل جدول المستخدمين القديم إلى التنسيق المتوقع عن طريق الاستنباط.
بدا طاولتي القديمة هكذا:
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
ثم إليك رمز الترحيل "UP" الذي انتهى به الأمر باستخدام (مع 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
.
للرجوع إليها ، يبدو أن بند "ابتكار" في نموذج المستخدم الخاص بي:
devise :database_authenticatable, :registerable, :recoverable,
:rememberable, :trackable, :validatable, :confirmable, :lockable,
:timeoutable, :authentication_keys => [ :login ]
لاحظ أن الغالب :authentication_keys
مثل هذا حتى يتطلب مني المستخدمون تسجيل الدخول باستخدام تسجيل الدخول الخاص بهم بدلاً من عنوان بريدهم الإلكتروني لتعديل بعض طرق العرض: rails generate devise:views
, ، ثم تحرير الملفات.
آمل أن يساعد هذا قليلا. حظا طيبا وفقك الله!
نصائح أخرى
إجابة Sanityinc رائعة! شكرا جزيلا!
لكن كان لدي نسخة مختلفة من AuthLogic مع كلمات المرور المشفرة وكانت ترحيل UP النهائي:
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.
إذا كنت تلبي خطأ "تجزئة غير صالح" عند تسجيل الدخول إلى المستخدم ، فأضف: مشفر في نموذج المستخدم. لقد هاجرت من Authlogic إلى ابتكار. قاعدة البيانات الخاصة بي هي mysql.
إذا كنت تحصل على أخطاء تشفير ، فحاول تغييرها devise.rb
التكوين:
config.stretches = 20
config.encryptor = :authlogic_sha512