33 votes

Confirmation par e-mail dans Rails sans utiliser de gems / plugins d'authentification existants

Je travaille sur ce service d'alerte en Rails. Et en fait, tout ce que j'ai besoin de faire, c'est, lorsque qu'un utilisateur s'inscrit, envoyer un email de confirmation à l'utilisateur. Et suite à la confirmation de l'utilisateur, activer l'utilisateur. J'ai essayé de jouer avec le tutoriel d'activation par email d'Authlogic de Matt Hooks, mais cela ne mène vraiment nulle part. Alors, avez-vous des idées sur comment je peux faire cela avec un minimum de tracas ? Merci !

MISE À JOUR

Voici comment j'ai réussi à faire faire le travail à devise :

  1. Installer le gem.

  2. Créer une migration pour les champs confirmable de devise.

  3. Spécifier

    devise :confirmable dans votre modèle.

  4. Créer une méthode confirm dans le contrôleur pertinent (et une route pour cette méthode) qui mettrait à jour l'attribut confirmed_at du modèle pertinent.

  5. Le générateur de devise crée quelques vues pour vous, dont une qui est confirmation_instructions.html.erb. Personnalisez le chemin là-bas.

J'ai utilisé Rails 2.3.2 et j'ai utilisé cette méthode avec l'authentification d'Authlogic et cela a bien fonctionné. J'ai l'intention de passer complètement à devise.

Honnêtement, je voulais accepter les deux réponses (malheureusement je ne peux pas le faire), mais c'est juste que la solution de devise semblait être une solution plus simple.

73voto

Paul Russell Points 3280

En supposant que, vu le titre, vous voulez absolument éviter Devise, Authlogic et compagnie, voici ce que je pense que vous devez faire :

  • Créez des attributs 'code de confirmation' et 'confirmé' dans votre modèle utilisateur.
  • Créez une nouvelle méthode de contrôleur sur votre contrôleur utilisateur qui s'attend à un identifiant utilisateur et un code de confirmation, recherche l'utilisateur et vérifie si le code passé en paramètre correspond au code stocké dans la base de données. Si c'est le cas, il efface le code et définit confirmé = true.
  • Créez une route qui mappe par exemple /utilisateurs/1/confirmation/code vers votre nouvelle méthode de contrôleur.
  • Créez un modèle ActionMailer pour l'e-mail que vous souhaitez envoyer. Cela devrait accepter un utilisateur en tant que paramètre et utiliser le code de confirmation de l'utilisateur pour envoyer un e-mail contenant un lien vers votre nouvelle route.
  • Créez un observateur pour votre modèle utilisateur. Si l'enregistrement est créé ou si l'adresse e-mail est modifiée, générez alors un code de confirmation aléatoire, insérez-le dans le modèle et effacez le drapeau confirmé. Ensuite, déclenchez votre ActionMailer.
  • Créez une méthode d'aide qui permet aux vues de vérifier si l'utilisateur actuel est confirmé.
  • Utilisez cette méthode pour activer/désactiver les fonctionnalités appropriées. N'oubliez pas de protéger vos méthodes de contrôleur ainsi que votre logique de vue comme il se doit.

5voto

user1017926 Points 258

Vous pourriez également utiliser des scopes pour sélectionner des utilisateurs.

class User < ActiveRecord::Base
  scope :certified, where(:certified => true)
end

Et ensuite dans votre code :

@user = User.certified.find_by_username(foo)

4voto

Maran Points 2283

Devise est une autre excellente gemme d'authentification qui inclut une activation par email, peut-être pourriez-vous essayer.

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