0
votes

Comment puis-je configurer mon application pour permettre uniquement des courriels spécifiques de s'inscrire à l'intention?

Je crée une fonctionnalité de crud et je veux seulement quelques personnes (adresses électroniques entières) pour pouvoir m'inscrire à travers le congé.

J'ai parcouru d'innombrables postes, mais ils utilisent principalement des domaines de messagerie ou une personne célibataire connexion. J'ai aussi essayé de créer ma propre méthode de validation dans mon utilisateur.rb, mais je ne peux pas sembler l'obtenir. xxx

Je ne reçois pas une erreur explicite mais la L'application semble ignorer mon état "si" et génère la condition "autre".


3 commentaires

Il y a un manquant ( dans la déclaration IF.


Vous vérifiez @ users.all contre une valeur unique 123.Example@gmail.com . Donc, au moins vous auriez besoin d'utiliser quelque chose comme inclut? () Mais vous n'avez pas vraiment besoin de valider ce avant_save sur chaque tentative de vous inscrire? Donc peut-être une méthode avant sauvegarde qui vérifie que le courrier électronique mis en œuvre fonctionnerait mieux?


Jetez un coup d'oeil ici: > github.com/plataformatec/devise/wiki/...


3 Réponses :


-1
votes

Sarah,

La première étape que j'aurais adopté pour accomplir cela serait de travailler à l'intérieur des enregistrements de Devise_Controller. Il s'agit du contrôleur où l'utilisateur signé sera servi à et vous voudrez ici trop écrire une partie du code de l'intention. Assurez-vous que les contrôleurs sont créés d'abord en exécutant le générateur de contrôleur de Devise: xxx

alors vous souhaitez trouver le enregistrements_controller.rb et remplacer le code là sous l'action Créer. Voici un exemple de code que j'ai écrit pour remplacer le contrôleur d'administrateur de Devise: xxx

pour l'appliquer à votre cas, ce que vous voudrez peut-être faire est d'utiliser une déclaration de cas pour voir si L'e-mail correspond à ceux que vous voulez. Par exemple, ci-dessous, vous souhaitez vérifier la ressource (code unique> (l'utilisateur unique dans ce cas, l'utilisateur qui se connecte) attribut par courrier électronique pour déterminer s'il s'agit d'un succès ou d'une défaillance: < Pré> xxx

Le set_flash_message! est des messages personnalisés pouvant être modifiés dans config / local / devise.en.yaml . Le deuxième mot-clé fait référence au nom de la touche YAML et vous pouvez personnaliser l'erreur ou le message de réussite là-bas. répond_with est la redirection et l'emplacement. Vous pouvez utiliser autant de lorsque déclarations au besoin. Ceci n'est qu'un moyen de le faire. J'espère que cela aide.


5 commentaires

Merci pour une réponse aussi approfondie. J'ai ajouté la déclaration de cas au contrôleur d'enregistrement, mais mon application permet d'entrer tout e-mail que j'entre dans le registre de la page Web. Des idées? Merci.


N'a pas lu la réponse complète, mais cette méthode créée semble terriblement complexe pour simplement blanchir quelques adresses électroniques.


Il est vrai que ci-dessous vous pouvez faire une validation qui serait probablement une logique plus simple dans le modèle. La raison pour laquelle j'ai inclus un dérogation à concevoir est due au fait que plus tard, car votre application augmente (si elle le fait), vous voudrez peut-être ajouter de plus en plus logique à l'éloignement du Contrôle via le contrôleur, une des raisons d'invention concerne une douleur.


Utilisation de la logique de Cannon ci-dessous, ajoutez une ligne retour vrai après les erreurs.Ajouter et voir si cela change quelque chose.


Cette réponse n'est pas très pertinente pour la question initiale.



2
votes

Le moyen le plus simple d'accomplir cela serait de créer une validation personnalisée comme vous l'avez fait à l'origine. Dans votre modèle d'utilisateur, vous pouvez créer une validation qui ressemble à ceci comme suit:

User.all.each do |i|

    if i.valid?
        puts "VALID"
    else
        puts "INVALID"
    end
end


6 commentaires

Merci pour votre réponse. J'ai ajouté le code que vous avez suggéré à mon modèle utilisateur et cela a fonctionné pour ma première adresse e-mail. J'ai trois adresses totales que je veux autoriser. Lorsque j'ai ajouté ces adresses à la condition "si" puis passa le formulaire d'inscription sur mon application, je reçois cette erreur: "La méthode non définie` comprend? ' Pour "exemple.abc@gmail.com": String Voulez-vous dire? Inclure? " .. si je le fais 'inclure?' Ensuite, j'obtiens l'erreur d'argument "en attendant 3, donné 1.


J'ai corrigé ma réponse mais le comprend? La fonction doit être renommée pour inclure?


Obtenir toujours un "mauvais nombre d'arguments (donné 3, prévu 1)". J'ai des virgules entre les trois cordes, devrais-je enlever ceux-ci?


J'ai mis à jour ma réponse afin que vous puissiez utiliser un tableau sur White-liste vos adresses électroniques.


Maintenant, l'application me permet d'enregistrer tout e-mail que je saisis via le formulaire sur la page Web. Je vais garder dessus et voir ce que je peux comprendre. Merci quand même pour vôtre aide!


Assurez-vous que votre fonction créer est créer! . Assurez-vous également que vous n'avez pas de ! dans la déclaration IF.



2
votes

Pour autoriser uniquement les utilisateurs avec certaines adresses électroniques, vous pouvez simplement ajouter un Inclusion em> validation.

- 123.example@gmail.com
- 456.example@gmail.com
- 789.example@gmail.com


3 commentaires

Vous pouvez utiliser un tableau régulier si vous n'aimez pas le % w [...] notation ou d'une manière ou d'une autre ont des espaces dans vos adresses électroniques.


Merci! Votre premier morceau de code a fonctionné! J'ai vérifié chacune de mes adresses électroniques avec des personnes non valides et c'était un succès! Merci également à tous ceux qui ont offert de l'aide! J'apprécie vraiment cela!


@Sarahhhumphreys Notez que la validation n'est déclenchée que lors de la mise à jour ou de la création de nouveaux enregistrements. Si vous avez déjà des utilisateurs de votre base de données, vous pouvez affiner des utilisations indésirables avec une migration. utilisateur.where.not (e-mail: utilisateur :: autorisé_emailils) .Delete_all (ou détruit_all si vous devez déclencher des rappels).