Alcune app di Rails 2.3 stanno usando Restful Authentication ma quel plugin sembra avere qualche problema con Rails 3. Nell'aggiornamento a Rails 3 ho usato Devise. Esiste un modo per passare agevolmente dall'autenticazione restful a Devise? Qualcuno ha fatto una migrazione che mostra come aggiornare il modello utente?Migrazione da Autenticazione Restful ad Elaborare
risposta
Ho aggiornato la mia applicazione da Restful Authentication a Devise già. Ecco la mia migrazione:
class AlterUsersForDevise < ActiveRecord::Migration
def self.up
remove_column :users, :name
change_column :users, :email, :string, :default => "", :null => false, :limit => 128
rename_column :users, :crypted_password, :encrypted_password
change_column :users, :encrypted_password, :string, :limit => 128, :default => "", :null => false
rename_column :users, :salt, :password_salt
change_column :users, :password_salt, :string, :default => "", :null => false, :limit => 255
add_column :users, :reset_password_token, :string
change_column :users, :remember_token, :string, :limit => 255
rename_column :users, :remember_token_expires_at, :remember_created_at
add_column :users, :sign_in_count, :integer, :default => 0
add_column :users, :current_sign_in_at, :datetime
add_column :users, :last_sign_in_at, :datetime
add_column :users, :current_sign_in_ip, :string
add_column :users, :last_sign_in_ip, :string
rename_column :users, :activation_code, :confirmation_token
change_column :users, :confirmation_token, :string, :limit => 255
rename_column :users, :activated_at, :confirmed_at
add_column :users, :confirmation_sent_at, :datetime
end
def self.down
add_column :users, :name, :string, :limit => 100, :default => ""
rename_column :users, :encrypted_password, :crypted_password
change_column :users, :crypted_password, :string, :limit => 40
rename_column :users, :password_salt, :salt
change_column :users, :salt, :string, :limit => 40
remove_column :users, :reset_password_token
change_column :users, :remember_token, :string, :limit => 40
rename_column :users, :remember_created_at, :remember_token_expires_at
remove_column :users, :sign_in_count
remove_column :users, :current_sign_in_at
remove_column :users, :last_sign_in_at
remove_column :users, :current_sign_in_ip
remove_column :users, :last_sign_in_ip
rename_column :users, :confirmation_token, :activation_code
change_column :users, :confirmation_token, :string, :limit => 40
rename_column :users, :confirmed_at, :activated_at
remove_column :users, :confirmation_sent_at
end
end
La mia applicazione non è stata pubblicata fino ad ora. Quindi io uso la crittografia della password di Devise invece di quella di Restful Authorization. Se l'applicazione è già attiva e si dispone di utenti attivi, è necessario configurare Devise per utilizzare SHA1 da Restful Authentication per codificare e decrittografare le password. Altrimenti tutti i tuoi utenti devono richiedere una nuova password.
È possibile configurarlo nell'inizializzatore di elaborazione.
Speranza che aiuta ...
stavo avendo problemi con la crittografia delle password (ma ho trovato la risposta, vedere la mia altra risposta). La vecchia app utilizzava una vecchia versione di Restful Authentication. Si stava trattando la crittografia delle password in questo modo:
# before filter
def encrypt_password
return if password.blank?
self.salt = Digest::SHA1.hexdigest("--#{Time.now.to_s}--#{login}--") if new_record?
self.crypted_password = encrypt(password)
end
# Encrypts some data with the salt.
def self.encrypt(password, salt)
Digest::SHA1.hexdigest("--#{salt}--#{password}--")
end
# Encrypts the password with the user salt
def encrypt(password)
self.class.encrypt(password, salt)
end
Se ho impostato di Devise config.encryptor
-:restful_authentication_sha1
non funziona.
Vedere la mia soluzione in un'altra risposta. –
Ecco come superare il problema delle password:
Hai bisogno di fare un criptato personalizzato in questo modo:
# /config/initializers/devise_encryptor.rb
require "digest/sha1"
module Devise
module Encryptors
class OldRestfulAuthentication < Base
def self.digest(password, stretches, salt, pepper)
Digest::SHA1.hexdigest("--#{salt}--#{password}--")
end
end
end
end
E poi scegliere in devise.rb
in questo modo:
config.encryptor = :old_restful_authentication
Quello dovrebbe farlo!
Ecco una buona guida sulla migrazione dal restful_authentication di ideare
https://github.com/plataformatec/devise/wiki/How-To:-Migrate-from-restful_authentication-to-Devise
Motivo della modifica: collegamento prima ha preso la gente a una pagina vuota.
ha corretto il collegamento che in precedenza riportava a una pagina vuota con scritto "Crea nuova pagina". – Jay
Nel mio caso funziona (analizzato authentication.rb e by_password.rb in vecchia gemma restful_authentication):
config/inizializzatori/devise.rb aggiungere questo:
config.encryptor = :restful_authentication
config.stretches = 10 #REST_AUTH_DIGEST_STRETCHES frome Restful Authentication file config/initializers/site_key.rb
config.pepper = 'mashauronilavrechkumyachik' #REST_AUTH_SITE_KEY frome Restful Authentication file config/initializers/site_key.rb
app/models/user.rb aggiungi: crittografabile
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable,
:encryptable, :omniauthable, :authentication_keys => [:login]
config/inizializzatori/devise_encryptor.rb creare con questo questo:
# -*- encoding : utf-8 -*-
require "digest/sha1"
module Devise
module Encryptable
module Encryptors
class RestfulAuthentication < Base
def self.digest(password, stretches, salt, pepper)
digest = pepper
stretches.times do
digest = secure_digest(digest, salt, password, pepper)
end
digest
end
def self.secure_digest(*args)
Digest::SHA1.hexdigest(args.flatten.join('--'))
end
def self.encrypt_password
return if password.blank?
self.password_salt = make_token if new_record?
self.encrypted_password = encrypt(password)
end
def self.make_token
secure_digest(Time.now, (1..10).map{ rand.to_s })
end
def self.encrypt(password)
self.password_digest(password, stretches, salt, pepper)
end
end
end
end
end
- 1. Autenticazione restful: consente l'accesso da più computer?
- 2. Migrazione ad Android Studio
- 3. Autenticazione base restful con ASP.NET MVC
- 4. Autenticazione API RESTful Laravel per app mobile
- 5. Autenticazione in un servizio web RESTful
- 6. Autenticazione e autorizzazione con Flatiron's Resourceful & Restful
- 7. Autenticazione utente AD
- 8. RESTful, autenticazione utente e Django-tastypie
- 9. Autenticazione CAS di un servizio Web RESTful
- 10. confusione di autenticazione api restful con oauth2
- 11. modo RESTful ad accettare una scelta
- 12. Migrazione ad Amazon SQL Server RDS
- 13. Autenticazione contro AD FS da un .Net 4.5 Console App
- 14. Autenticazione token di sicurezza Spring - Servizio JSON RESTful
- 15. migrazione django Nessuna migrazione da applicare
- 16. Web service RESTful di ASP.net + Autenticazione di base
- 17. Autenticazione restful (e stateless) con Play Framework e Scala
- 18. Autenticazione AD FS 2.0 e AJAX
- 19. Autorizzazione in API HTTP RESTful, 401 Autenticazione WWW
- 20. Migrazione da Jam a CMake
- 21. Migrazione da git a Perforce
- 22. Come chiamare i servizi RESTFUL da GWT?
- 23. Come elaborare una richiesta multipart composta da un file e un oggetto JSON nel servizio restful di Spring?
- 24. Passaggio da migrazione automatica EF a migrazione prima del codice
- 25. RESTful Authentication with Tornado
- 26. Migrazione da clearcase a mercurial
- 27. Migrazione da Stata a Python
- 28. Migrazione da TFS a Redmine
- 29. Migrazione da DataSet a EntityFramework
- 30. Migrazione da Authlogic a Devise
Grazie, questo funziona.Ho avuto un problema aggiuntivo che ho affrontato nelle 2 risposte seguenti. –