Node.js:Passport,检查用户是否已经登录
Node.js: Passport, checking if the user had already logged in
我有一个快速路由器,用于使用令牌系统登录用户:
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) {
});
该函数将在带有请求和响应对象的回调之前运行,因此,如果它没有经过身份验证,它将执行您告诉它要做的任何操作,如果它经过了身份验证,则它将继续
相关文章:
- 如何检查用户是否使用$routeChangeStart登录angularjs
- Node.js:Passport,检查用户是否已经登录
- 使用Paginator(主干.js)时无法检测用户是否已登录
- 如何检测tumblr用户是否已登录
- 如何知道twitter用户是否已登录
- 是否有任何twitter功能用于登录应用程序
- 如何检查我是否使用java服务登录到外部应用程序
- 您可以确定用户是否使用嵌入脚本登录到Yammer吗
- 使用梦工厂如何检查我是否已登录
- Django模板在检查用户是否登录时出错
- 电子商务网站如何检测用户是否登录
- 显示用户是否登录了facebook
- Opencart -检查用户是否登录并重定向到帐户页面
- 根据用户是否登录,在自定义模板上弹出一个注册表单
- 简单可靠的方式来检查用户是否登录或不使用javascript [ForumMotion]
- 新的Facebook API:使用getLoginStatus来检测用户是否登录
- 用户是否登录到谷歌
- 处理用户是否登录
- 如何使用“Google Sign In"”检查用户是否登录;(OAuth 2.0)
- 最好的方式来检查用户是否登录与node.js和表达和更改客户端html