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
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