2010-09-10 8 views
28

J'essaie comment Devise fonctionne avec un de mes projets pour l'authentification de l'utilisateur. Il y a une exigence de l'utilisateur que son administrateur devrait être capable de générer un lot de nom d'utilisateur et mot de passe de l'utilisateur de temps en temps, puis l'administrateur enverra le nouveau nom d'utilisateur et mot de passe par courriel à ses utilisateurs.Comment générer automatiquement des mots de passe dans Rails Devise?

Supposons que l'administrateur ait la connaissance de SQL direct sur la base de données MySQL, comment les noms d'utilisateurs/mots de passe générés peuvent-ils être reconnus par Devise? Merci!

Répondre

73

Utilisez la méthode Devise.friendly_token:

password_length = 6 
password = Devise.friendly_token.first(password_length) 
User.create!(:email => '[email protected]', :password => password, :password_confirmation => password) 

Pour votre information: Devise.friendly_token retourne un 20 jeton de caractère. Dans l'exemple ci-dessus, nous supprimons les premiers caractères password_length du jeton généré à l'aide de la méthode String#first fournie par Rails.

6

Une option consisterait à utiliser Devise.generate_token. C'est à dire.

password = User.generate_token('password') 
User.create!(:email => '[email protected]', :password => password, :password_confirmation => password) 

Cette option n'est pas disponible depuis longtemps chez Devise. Veuillez vous référer à l'autre réponse (friendly_token).

+4

Cela ne semble plus fonctionner dans la dernière version. J'obtiens une erreur "méthode protégée" pour generate_token. –

+0

ne fonctionne pas dans les dernières versions –

+0

Vous devez utiliser 'Devise.token_generator' pour le moment. – typeoneerror

0

(mise en garde rapide: Je suis rails nouveauB)

J'ai essayé le generate_token mais il ne fait pas ce que vous pensez (voir les docs)

(j'utilise des rails 3.0. 5 et DEVISE 1.1.7)

ce que je trouve est qui méditent va générer ce genre de choses pour vous dans l'arrière-plan lorsque vous faites:

User.create!(:email => "[email protected]", :password => "password") 

devrait créer la Devise encrypted_password et sa C'est pour toi. (Pop ouvrir une console et l'essayer là-bas)

+0

L'OP demandait comment "générer" de nouveaux mots de passe automatiquement pour les nouveaux utilisateurs. Ce que vous faites ici est de définir le mot de passe de chaque nouvel utilisateur sur "mot de passe". Bien sûr, il est crypté dans la base de données, mais vous allez être très vulnérable aux attaques de dictionnaire (deviner). Si vous générez des mots de passe uniques à l'aide de jetons (par exemple, generate_token), vous êtes extrêmement sûr car ces jetons sont plutôt longs et compliqués (types de caractères mixtes, pas de dictionnaire, etc.). –

+0

Il me semble qu'il demande comment il peut entrer les noms d'utilisateur et mots de passe générés, et les faire traiter par Devise. Il demande spécifiquement: "comment les identifiants/mots de passe générés peuvent-ils être reconnus par Devise?" ce que je voulais dire: Nous avons déjà une liste générée de noms d'utilisateur et de mots de passe, mais je ne sais pas comment insérer cette information dans la base de données afin que le système la reconnaisse. Ce que je montre ci-dessus est simplement que tout le cryptage d'arrière-plan et tel sera pris en charge par Devise, pas besoin de passer par la base de données DB. –

+0

Et j'étais __definitely__ ** NOT ** suggérant qu'ils utilisent "mot de passe" pour chaque nouvel utilisateur. J'espère que ce n'est pas comme ça que ça s'est passé. C'est en effet une manière incroyablement pauvre d'ajouter de nouveaux utilisateurs. J'ai d'abord pensé que le 'generate_token' était pour générer le mot de passe encrypted, puisque l'OP suggérait avoir un accès direct à la base de données (en contournant ActiveRecord). –

Questions connexes