3 votes

Migration du stockage clair des mots de passe vers authlogic

Je travaille actuellement sur une application Rails qui stocke des mots de passe en clair (...). Je suis donc en train de migrer vers l'authentification Authlogic avec un cryptage SHA512 'standard'.

J'ai fait cela et cela fonctionne bien :

#file /models/user.rb
class User < ActiveRecord::Base

  acts_as_authentic { |c|
    c.transition_from_crypto_providers = [MyOwnNoCrypto, Authlogic::CryptoProviders::Sha512]
  } 
end

#file /lib/my_own_no_crypto.rb
class MyOwnNoCrypto
  def self.encrypt(*tokens)
    return tokens[0] # or tokens.join I guess
  end

  def self.matches?(crypted_password, *tokens)
    return crypted_password == tokens.join
  end
end

C'est bien -- et cela fonctionne très bien -- mais je me demande s'il n'y a pas une façon plus sexy de faire cela, peut-être avec une option du noyau d'Authlogic ?

Merci !

2voto

James A. Rosen Points 25774

Je suis d'accord avec la partie de La réponse de thomasfedb qui suggère une transition unique plutôt que d'utiliser le modèle de transition d'AuthLogic. Dans ce cas, vous voulez chiffrer ces mots de passe dès que possible, et non la prochaine fois que l'utilisateur se connecte. Au lieu d'une tâche Rake, cependant, je pourrais suggérer une migration :

# in db/migrate/nnnnnnnn_encrypt_passwords.rb:

class EncryptPasswords < ActiveRecord::Migration
  def self.up
    add_column :users, :crypted_password
    User.each do |u|
      u.encrypt_password!
    end
    remove_column :users, :password
  end

  def self.down
    raise IrreversibleMigration.new('Cannot decrypt user passwords')
  end
end

1voto

Cameron Teasdale Points 153

Personnellement, j'écrirais une migration pour migrer tous les mots de passe en clair vers des mots de passe cryptés. Vous pouvez définir votre propre modèle de base dans la migration pour permettre un accès de bas niveau.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X