77 votes

comment implémenter l'authentification de connexion dans node.js

J'ai ce nœud de serveur en cours d'exécution :

var server=http.createServer(function(request, responsehttp) {
    if (request.method == 'POST') {
        var body = '';
        request.on('data', function (data) {
            body += data;
        });
        request.on('end', function () {
            var POST = qs.parse(body);
            processquery(POST, request, responsehttp);
        });
    } else {
        var url_parts = url.parse(request.url, true);
        var query = url_parts.query;
        console.log(query);
        processquery(query, request, responsehttp);
    }
});

Je veux ajouter un formulaire de connexion pour ce serveur .ainsi, lorsque l'utilisateur est authentifié puis il va le montrer .

   function processquery(query, request, responsehttp){
    var returnResult = function (data){
        responsehttp.end(JSON.stringify(data));
    };

    if (!query.command) {
        fileprocess(request, responsehttp);
    }
    responsehttp.writeHead(200, {"Content-Type": "application/json"});
    switch(query.command) {
        case 'logout':
            logout(query, returnResult);
            break;
        case 'login':
            login(query, returnResult);
            break;
    }    
}

dans le processus de fonction de requête retournant les fichiers de client si aucune commande n'est pas donné , donc, je peux envoyer la commande de connexion du client au serveur , mais ce serveur devrait faire lorsqu'il recevoir la commande de connexion avec le nom d'utilisateur mot de passe , comment il convient de la main la demande de connexion et le retour de la connexion de succès ou d'échec, pour l'écriture de cette partie j'ai besoin d'aide .

ce que j'ai essayé .

function login(request, callback) {
    if(request.username==users[request.username] && request.password==users[request.username].password) {
        users[request.username].auth=true;
        var data = {result:'success','message':'login successful'};
        callback(data);
    } else {
        var data = {result:'error','message':'login incorrect'};
        callback(data);
    }
}

Veuillez indiquer comment puis-je ajouter une session dans ce j'ai essayé d'ajouter , à la demande variable en fonction de connexion et essayé de réglage de la demande.variable de session, il est dit demande.la session n'est pas défini .

Veuillez indiquer comment puis-je écrire ce module de connexion qui peut maintenir l'authentification de la connexion correctement pour chaque utilisateur .

249voto

alessioalex Points 27001

Voici comment je le fais avec Express.js:

1) Vérifier si l'utilisateur est authentifié: j'ai un middleware fonction nommée CheckAuth que j'utilise sur chaque itinéraire que les besoins de l'utilisateur authentifié:

function checkAuth(req, res, next) {
  if (!req.session.user_id) {
    res.send('You are not authorized to view this page');
  } else {
    next();
  }
}

J'utilise cette fonction dans mes voies comme ceci:

app.get('/my_secret_page', checkAuth, function (req, res) {
  res.send('if you are viewing this page it means you are logged in');
});

2) La connexion de la route:

app.post('/login', function (req, res) {
  var post = req.body;
  if (post.user === 'john' && post.password === 'johnspassword') {
    req.session.user_id = johns_user_id_here;
    res.redirect('/my_secret_page');
  } else {
    res.send('Bad user/pass');
  }
});

3) La déconnexion de la route:

app.get('/logout', function (req, res) {
  delete req.session.user_id;
  res.redirect('/login');
});      

Si vous voulez en savoir plus sur Express.js visitez leur site ici: expressjs.com/guide.html Si il y a un besoin pour des trucs plus complexe, la caisse everyauth (il a beaucoup de auth méthodes disponibles, pour facebook, twitter, etc...; bon tutorial ici).

6voto

Farid Nouri Neshat Points 6895

En fait, ce n'est pas vraiment la réponse à la question, mais ce est une meilleure façon de le faire.

Je vous suggère d'utiliser connecter/express comme serveur http, car ils vous faire économiser beaucoup de temps. Manifestement, vous n'avez pas envie de réinventer la roue. Dans votre cas, la gestion de session est beaucoup plus facile avec la connexion/l'express.

A côté de cela, pour l'authentification, je vous suggère d'utiliser everyauth. Qui supporte un grand nombre de stratégies d'authentification. Génial pour un développement rapide.

Tout cela peut être facilement vers le bas avec quelques copier coller à partir de leur documentation!

3voto

Luke Willis Points 1833

Pour ajouter à Farid de pseudo-réponse,

Pensez à utiliser Passport.js plus de everyauth.

Les réponses à cette question, de donner un aperçu des différences.


Il ya beaucoup d'avantages pour le déchargement de votre authentification de l'utilisateur à Google, Facebook ou un autre site web. Si les exigences de votre application sont telles que vous pouvez utiliser Passeport comme unique fournisseur d'authentification ou à côté des traditionnelles de connexion, il peut rendre l'expérience plus facile pour vos utilisateurs.

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