Varias aplicaciones de Rails 2.3 usan Autentificación reposada, pero ese complemento parece tener algunos problemas con Rails 3. Al actualizar a Rails 3 he estado usando Devise. ¿Hay alguna forma de pasar sin problemas de Restful Authentication a Devise? ¿Alguien ha hecho una migración que muestra cómo actualizar el modelo de Usuario?Migración desde la autenticación reposada a Devise
Respuesta
He actualizado mi aplicación de Restful Authentication a Devise ya. Aquí está mi migración:
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
Mi aplicación no es en vivo hasta ahora. Así que utilizo el cifrado de contraseñas de Devise en lugar del de Autorización reposada. Si su aplicación ya está activa y tiene usuarios activos, debe configurar Devise para que use SHA1 desde Restful Authentication para encriptar y descifrar contraseñas. De lo contrario, todos sus usuarios deben solicitar una nueva contraseña.
Puede configurar esto en el inicializador del dispositivo.
Espero que ayude ...
que estaba teniendo problemas con el cifrado de la contraseña (pero he encontrado la respuesta, ver a mi otra respuesta). La aplicación anterior usaba una versión anterior de Restful Authentication. Que estaba manejando el cifrado de la contraseña de esta manera:
# 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
Si fijo del Legado config.encryptor
-:restful_authentication_sha1
no funciona.
Ver mi solución en otra respuesta. –
Así es como para superar el problema de las contraseñas:
Es necesario hacer un encriptador encargo de este 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
Y a continuación, elija en devise.rb
así:
config.encryptor = :old_restful_authentication
Eso ¡Deberías hacerlo!
Aquí es una buena guía sobre la migración del restful_authentication idear
https://github.com/plataformatec/devise/wiki/How-To:-Migrate-from-restful_authentication-to-Devise
Motivo de la edición: enlace antes tomó la gente a una página en blanco.
corrigió el enlace que anteriormente conducía a una página en blanco que dice "Crear nueva página". – Jay
En mi caso funciona (Analizados authentication.rb y by_password.rb en edad restful_authentication joya):
config/inicializadores/devise.rb añadir lo siguiente:
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
aplicación/modelos/user.rb agregar: encriptable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable,
:encryptable, :omniauthable, :authentication_keys => [:login]
config/inicializadores/devise_encryptor.rb crear con este presente:
# -*- 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. Migración de Authlogic a Devise
- 2. Autenticación implícita en Devise
- 3. Autenticación reposada: ¿permite inicios de sesión de varias computadoras?
- 4. Problema de secuestro de sesión inadvertido con autenticación reposada
- 5. cancan skip_authorization_check para autenticación Devise
- 6. Migración desde Winforms a WPF
- 7. Rails 3.2 + Devise 2.1 + OmniAuth + Backbone.js Autenticación
- 8. Error de codificación al usar la autenticación Devise ldap
- 9. Respuesta XML personalizada para la falla de autenticación utilizando Devise
- 10. Motor de autenticación para ASP.Net MVC como Devise for Rails?
- 11. Autenticación con Devise en las pruebas de Rspec
- 12. Autenticación API y aplicación usando Devise, Doorkeeper y token OAuth2
- 13. Prueba funcional de Ruby on Rails con autenticación Devise
- 14. ¿Podemos automatizar la migración a SDL Tridion?
- 15. la migración falla en heroku debido a activeadmin mailer
- 16. ¿Cómo manejo la autenticación con Devise cuando uso múltiples modelos en la aplicación Rails 3.2
- 17. Migración EF a Oracle
- 18. ¿Ejecuta una tarea de Rake desde la migración?
- 19. FOSUserBundle: Contraseña personalizada/Migración desde la antigua estructura DB
- 20. Migración de Mercurial a la subversión
- 21. Exposición de Rails/Devise Authentication a la aplicación iOS
- 22. Devise Omniauth y la aplicación de Iphone/Android
- 23. ¿Cómo utilizar la autenticación de tokens con Rails, Devise y Backbone.js?
- 24. ¿Cuál es la diferencia entre OmniAuth Identity strategy y Devise?
- 25. Migración de TFS a Redmine
- 26. Migración de PHP a Java
- 27. Migración de TFS a Git
- 28. Migración de PHP4 a PHP5
- 29. autenticación falló al llamar a un servicio WCF desde ASP.NET
- 30. Devise y OmniAuth recordando OAuth
Gracias, esto funciona.Tuve un problema adicional que abordé en las 2 respuestas a continuación. –