سؤال

لقد قمت سابقًا بتطبيق 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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top