Comment implémenter la fonctionnalité de vérification du courrier électronique dans votre application NodeJS à l'aide d'Express, SendGrid, Sequelize ORM (MySQL).

Image de Jack Moreh via StockVault

Ce tutoriel va vous fournir un guide de haut niveau, indépendamment des spécifications de votre application, sur la manière de faire vérifier par courrier électronique les utilisateurs de votre application Web NodeJS / Express. assurez-vous qu'ils ne sont pas des robots avec de faux emails.

APERÇU GÉNÉRAL

Pour ce tutoriel, MySQL est utilisé comme base de données et SendGrid comme notre bibliothèque d’envoi d’e-mails.

Fondamentalement, la vérification de courrier électronique est un processus simple et direct qui consiste à:

  • L'utilisateur s'inscrit dans l'application.
  • Un utilisateur ne peut pas encore se connecter à l'application tant que son courrier électronique n'a pas été vérifié.
  • Un utilisateur reçoit un courrier électronique avec un lien de vérification contenant un jeton.
  • L'utilisateur clique sur le lien de vérification pour être redirigé vers l'application où le jeton est utilisé pour les vérifier.

Voici donc le flux de travail que nous allons suivre tout au long de ce tutoriel:

  1. Génération de modèles (c'est-à-dire utilisateur et VerificationToken) avec Sequelize
  2. Définir les contrôleurs pour gérer les opérations (c.-à-d. Inscription, envoi de vérification de courrier électronique à l'aide de SendGrid).
  3. Ajouter un itinéraire de vérification.

GENERATION DE MODELES

- Création d'un modèle d'utilisateur

La mise en garde ici avec notre modèle d'utilisateur est que nous allons ajouter une colonne booléenne, isVerified, pour distinguer les utilisateurs qui ont été vérifiés de ceux qui ne l'ont pas encore été. Notre colonne isVerified aura une valeur par défaut de false.

En utilisant sequelize-cli, nous générons le modèle utilisateur

sequelize model: generate --name User --attributes firstName: string, lastName: string, email: string, mot de passe: string, isVerified: boolean

Ainsi, dans le répertoire de vos modèles, vous trouvez un fichier user.js, mais vous devez également tenir compte du fait qu'il existe une relation un-à-un entre le modèle User et VerificationToken. Dans notre fonction associée, nous allons donc ajouter un extrait pour indiquer cette relation. .

Cela générera également un fichier de migration pour nous.

Maintenant, nous générons un autre modèle pour gérer nos jetons de vérification et introduisons ici une contrainte de clé étrangère, userId, pour référencer la table User.

modèle sequelize: generate --name VericationToken --attributes userId: integer, token: string

Dans notre fichier de migration, nous indiquerons cette colonne userId dans la table VerificationToken aux références à la table User.

Il est également important de noter que nous allons ajouter une requête pour créer un événement, expireToken à la ligne 32, qui supprimera les jetons datant d'un jour.

DÉFINITION DES CONTRÔLEURS POUR GÉRER LES OPÉRATIONS

Avant de créer nos contrôleurs, nous devons créer une fonction d'assistance pour envoyer nos courriels à l'aide de SendGrid. Tout d'abord, inscrivez-vous sur SendGrid, obtenez votre clé API et stockez-la en tant que variable env process.env.SendGridApiKey.

Maintenant que nous créons notre contrôleur d’inscription, un paquet appelé crypto-random-string sera ajouté pour nous permettre de générer des chaînes aléatoires pour notre jeton.

Nous créons maintenant le contrôleur de vérification,

CRÉER DES ITINÉRAIRES

Maintenant, nous ajoutons les itinéraires suivants,

CONCLUSION

C’est tout pour notre guide de haut niveau sur le concept général de la mise en œuvre de la vérification de courrier électronique à l’aide de SendGrid et de Sequelize ORM. Notez également que, selon les spécifications de votre application Web, votre implémentation peut différer.

N'hésitez pas à laisser des commentaires dans les commentaires ou à me contacter sur Twitter.

À votre santé!!!

Avez-vous besoin de recruter les meilleurs développeurs? Parlez à Andela pour vous aider à évoluer.