Devise password vide

Par uTiiZ, il y a 9 ans


Bonjour,

Je souhaite faire un systeme d'authentification et de création de compte via la gem devise.
Je génère tout ce qu'il faut tout fonctionne bien.
Par contre je voudrais avoir la possibilité de créer des comptes avec des mots de passes vides. (En ayant des comptes avec des mots de passe classiques)

Dans config/devise.rb, j'ai mit la longueur du mot de passe de 0 à 128 :

config.password_length = 0..128

Dans mon modèle User j'ai écrit la méthode suivante : (Pas sur que celà soit nécessaire)

def password_required? false end

Mais après je ne vois pas ce qu'il faut faire.
Si quelqu'un peux m'aider.

Merci d'avance

3 réponses

kal-el, il y a 9 ans

Qu'est-ce que tu entends par des comptes avec des mots de passe classique ?

uTiiZ, il y a 9 ans

Juste des comptes avec un login / mot de passe non vide

uTiiZ, il y a 9 ans

Je répond à ma propre question si d'autres ont la meme problématique que moi (bien que peut commun de vouloir des comptes sans mot de passe ^^)

Tout d'abord il faut créer un fichier dans lib/devise/strategies (et créer les dossiers s'ils n'existent pas) avec le nom database_authenticatable.rb :

require 'devise/strategies/authenticatable' module Devise module Strategies # Default strategy for signing in a user, based on their email and password in the database. class DatabaseAuthenticatable < Authenticatable def authenticate! if password.blank? authentication_hash[:encrypted_password] = '' end resource = mapping.to.find_for_database_authentication(authentication_hash) hashed = false if validate(resource){ hashed = true; resource.valid_password?(password) } remember_me(resource) resource.after_database_authentication success!(resource) end mapping.to.new.password = password if !hashed && Devise.paranoid fail(:not_found_in_database) unless resource end end end end Warden::Strategies.add(:database_authenticatable, Devise::Strategies::DatabaseAuthenticatable)

Ensuite dans la migration devise_create_user.rb ajouter:

t.string :remember_token

Et enfin dans le model user.rb :

before_create :remember_value def valid_password?(password) if password.blank? true else super end end def password_required? new_record? ? false : super end def remember_value self.remember_token ||= Devise.friendly_token end