comment faire confirmer l'adresse e-mail avec express/node?

J'essaie de compiler confirmer l'adresse e-mail pour les utilisateurs, pour vérifier que leur e-mail est réel. Quel paquet dois-je utiliser pour confirmer l'adresse email de l'utilisateur. Jusqu'à présent, j'utilise Mangoose et express!--2-->

Exemple De Code

var UserSchema = new mongoose.Schema({
    email: { type: String, unique: true, lowercase: true }
    password: String
});

var User = mongoose.model('User', UserSchema);

app.post('/signup', function(req, res, next) {
   // Create a new User
   var user = new User();
   user.email = req.body.email;
   user.password = req.body.password;
   user.save();
});

Dans l'application.post codes, comment puis-je confirmer l'adresse e-mail de l'utilisateur?

19
demandé sur sinusGob 2016-08-23 08:09:46

3 réponses

ce que vous recherchez s'appelle "vérification de compte" ou "vérification de courriel". Il y a beaucoup de modules de noeuds qui peuvent effectuer cela, mais le principe va comme ceci:

  • votre modèle Utilisateur doit avoir un active attribut false par défaut
  • Lorsque l'utilisateur soumet un valide formulaire d'inscription, créez un nouvel Utilisateur (qui est active sera false initialement)
  • créer un hash aléatoire et le stocker dans votre base de données avec une référence à la L'ID d'utilisateur
  • Envoyer un courrier électronique à l'adresse email fournie avec le hash dans le cadre d'un lien pointant vers un itinéraire sur votre serveur
  • quand un utilisateur clique sur le lien et touche votre route, vérifiez le hachage passé dans L'URL
  • si le hachage existe dans la base de données, récupérez l'utilisateur associé et définissez leur active propriété true
  • Supprimer le hachage de la base de données, il n'est plus nécessaire

Votre utilisateur est maintenant vérifiée.

70
répondu Soviut 2017-07-27 06:10:05
var express=require('express');
var nodemailer = require("nodemailer");
var app=express();
/*
    Here we are configuring our SMTP Server details.
    STMP is mail server which is responsible for sending and recieving email.
*/
var smtpTransport = nodemailer.createTransport("SMTP",{
    service: "Gmail",
    auth: {
        user: "Your Gmail ID",
        pass: "Gmail Password"
    }
});
var rand,mailOptions,host,link;
/*------------------SMTP Over-----------------------------*/

/*------------------Routing Started ------------------------*/

app.get('/',function(req,res){
    res.sendfile('index.html');
});
app.get('/send',function(req,res){
        rand=Math.floor((Math.random() * 100) + 54);
    host=req.get('host');
    link="http://"+req.get('host')+"/verify?id="+rand;
    mailOptions={
        to : req.query.to,
        subject : "Please confirm your Email account",
        html : "Hello,<br> Please Click on the link to verify your email.<br><a href="+link+">Click here to verify</a>" 
    }
    console.log(mailOptions);
    smtpTransport.sendMail(mailOptions, function(error, response){
     if(error){
            console.log(error);
        res.end("error");
     }else{
            console.log("Message sent: " + response.message);
        res.end("sent");
         }
});
});

app.get('/verify',function(req,res){
console.log(req.protocol+":/"+req.get('host'));
if((req.protocol+"://"+req.get('host'))==("http://"+host))
{
    console.log("Domain is matched. Information is from Authentic email");
    if(req.query.id==rand)
    {
        console.log("email is verified");
        res.end("<h1>Email "+mailOptions.to+" is been Successfully verified");
    }
    else
    {
        console.log("email is not verified");
        res.end("<h1>Bad Request</h1>");
    }
}
else
{
    res.end("<h1>Request is from unknown source");
}
});

/*--------------------Routing Over----------------------------*/

app.listen(3000,function(){
    console.log("Express Started on Port 3000");
});

suivez l'exemple du code, vous pouvez utiliser nodemailer envoyer le lien, puis le vérifier. Voici un lien: https://codeforgeek.com/2014/07/node-email-verification-script/

13
répondu BlackMamba 2016-08-23 05:32:33

si vous êtes en train de tester sur votre machine locale, une façon simple de comprendre comment le faire peut être :

en supposant que vous savez déjà envoyer des mails par l'intermédiaire de nodemailer..

une fois que l'utilisateur s'inscrit, après avoir stocké les données d'inscription dans votre base de données, du côté de votre serveur, prenez l'email de l'utilisateur à partir des données d'inscription reçues et un nombre généré au hasard et construisez une url personnalisée avec l'adresse de la page où l'Utilisateur sera dirigé après qu'il/elle clique sur le lien donné dans le mail.

var customUrl = "http://"+ your host + "/" + your verification web-page + "?email=" + userEmail + "&id=" + randomNumber;

Un exemple:

var userEmail = someone@example.com
var host = localhost:8080
var directWebPage = verifyUserEmail.html
var randomNumber = // generate with math.random() // lets say 111

mise dans le format ci-dessus de customUrl il ressemble à quelque chose comme ceci

customUrl:http://localhost:8080/verifyUserEmail.htmlemail=someone@example.com&id=111

enregistrez ce customUrl quelque part (probablement dans votre base de données) Maintenant, envoyer un e-mail à l'utilisateur avec le corps d'e-mail contenant ce lien cutomUrl.

<a href="customUrl">Click to verify your email</a>

Lorsque l'utilisateur clique sur le lien, il sera dirigé vers verifyUserEmail.html page et quand cela se produit vous pouvez extraire la page url contenant email et id information

Par exemple dans angulaire j'ai fait ceci-

var urlVerifyData = $location.url(); or $location.absUrl();

maintenant extraire email formulaire urlVerifyData chaîne à l'aide de javascript méthodes string

Demande de votre serveur avec ce email et urlVerifyData

maintenant, interrogez votre base de données pour ce courriel et vérifiez customUrl avec de l'utilisateur urlVerifyData

S'ils correspondent, hola ! Vous avez vous-même un véritable utilisateur !!!

2
répondu Piyush Upadhyay 2018-02-07 12:26:16