2009-12-25 14 views
4

J'utilise Turbogears 2.1 et repoze.who/what et je n'arrive pas à comprendre comment étendre la fonctionnalité d'authentification de base. Essentiellement, je tente d'obliger les utilisateurs à activer leur compte via un lien envoyé par e-mail avant de pouvoir se connecter. S'ils essaient de se connecter sans activer leur compte, je veux afficher un message d'erreur approprié. La fonctionnalité par défaut de Turbogears affiche simplement un message pour toutes les erreurs. J'ai créé mon propre plugin d'authentification qui fonctionne correctement. Il ne permettra pas aux utilisateurs de se connecter s'ils n'ont pas activé leur compte. Cependant, le problème survient lorsque j'essaie de créer le formulaire et d'afficher des messages d'erreur personnalisés. Comment puis-je faire cela?Comment étendre la fonctionnalité de connexion de Turbogears 2.1

Merci

+0

À quoi ressemble votre code d'autorisation existant? par exemple. quels prédicats utilisez-vous, et/ou sont-ils au niveau de l'action, au niveau du contrôleur, etc. – Kylotan

Répondre

4

Il est impossible de donner une très bonne réponse sans voir votre code réel, mais voici une idée:

  1. Créer un plugin fournisseur de métadonnées repoze.who que quelque chose de « gribouillis » qui indique si l'utilisateur a activé son compte.
  2. Créez un plugin "challenger decider" qui vérifie à la fois si l'utilisateur s'est authentifié et s'il a activé son compte (en vérifiant les métadonnées que vous avez définies avec le plugin de métadonnées).
  3. Créez un plugin challenger pour renvoyer le véritable challenge. Si l'utilisateur n'est pas authentifié, renvoyez un formulaire/une invite de connexion. Si l'utilisateur est authentifié (votre plugin authentificateur a réussi), mais qu'il n'a pas activé son compte, renvoyez une page d'erreur personnalisée demandant à l'utilisateur d'activer son compte.

Dans tous les cas, lisez attentivement this page. Vous pouvez également utiliser repoze.what avec un prédicat personnalisé, mais vous devrez probablement saupoudrer les décorateurs tout au long de votre code, en vérifiant si leur compte a été activé sur chaque contrôleur/méthode. Laid.

Espérons que cela aide!