Node.js:Passport,检查用户是否已经登录

Node.js: Passport, checking if the user had already logged in

本文关键字:是否 登录 用户 检查 js Passport Node      更新时间:2024-06-18

我有一个快速路由器,用于使用令牌系统登录用户:

var express = require('express');
var router = express.Router();
var passport = require('passport');
var User = require('../models/user');
var Verify = require('./verify');
router.post('/register', function(req, res) {
    User.register(new User({ username : req.body.username }),
      req.body.password, function(err, user) {
        if (err) {
            return res.status(500).json({err: err});
        }
        passport.authenticate('local')(req, res, function () {
            return res.status(200).json({status: 'Registration Successful!'});
        });
    });
});
router.post('/login', function(req, res, next) {
  passport.authenticate('local', function(err, user, info) {
    if (err) {
      return next(err);
    }
    if (!user) {
      return res.status(401).json({
        err: info
      });
    }
    req.logIn(user, function(err) {
      if (err) {
        return res.status(500).json({
          err: 'Could not log in user'
        });
      }
      var token = Verify.getToken(user);
        res.status(200).json({
        status: 'Login successful!',
        success: true,
        token: token
      });
    });
  })(req,res,next);
});
module.exports = router;

验证文件:

var User = require('../models/user');
var jwt = require('jsonwebtoken'); // used to create, sign, and verify tokens
var config = require('../config.js');
exports.getToken = function (user) {
    return jwt.sign(user, config.secretKey, {
        expiresIn: 3600
    });
};
exports.verifyOrdinaryUser = function (req, res, next) {
    // check header or url parameters or post parameters for token
    var token = req.body.token || req.query.token || req.headers['x-access-token'];
    // decode token
    if (token) {
        // verifies secret and checks exp
        jwt.verify(token, config.secretKey, function (err, decoded) {
            if (err) {
                var err = new Error('You are not authenticated!');
                err.status = 401;
                return next(err);
            } else {
                // if everything is good, save to request for use in other routes
                req.decoded = decoded;
                next();
            }
        });
    } else {
        // if there is no token
        // return an error
        var err = new Error('No token provided!');
        err.status = 403;
        return next(err);
    }
};

现在,我正在验证用户是否使用success属性登录。我希望我的路由在进行护照身份验证之前检查用户是否已经登录到登录路由中。我该如何做到这一点?

您需要这样的东西:

var auth = function(req, res, next){
   if (!req.isAuthenticated())
    res.send(401);
     else next();
   };

将其添加到您的路线中,例如:

app.route('/checkout', verifyOrdinaryUser, function(req, res) {
});

该函数将在带有请求和响应对象的回调之前运行,因此,如果它没有经过身份验证,它将执行您告诉它要做的任何操作,如果它经过了身份验证,则它将继续