【发布时间】:2015-03-16 23:43:04
【问题描述】:
我正在使用 express + passport 和 angularJS 制作应用程序;我希望能够通过 json 发送护照产生的任何错误(例如使用用户名或未提供电子邮件),以便我的 angularJS 应用程序可以在 json 响应中接收这些错误。更具体地说,现在我想对我的注册 POST 方法输出任何错误的 json 响应。我已经尝试为自己做这件事,我已经在整个网络上搜索并且堆栈溢出我就是无法解决这个问题!
这是我在 express 中的用户路由文件:
var express = require('express');
var router = express.Router();
var isAuthenticated = require('../config/isAuthenticated');
module.exports = function(passport){
router.get('/loggedin', function(req, res){
res.send(req.isAuthenticated() ? req.user : '0');
});
router.post('/signup', passport.authenticate('local-signup', {
successRedirect : '/',
failureRedirect : '/signup',
failureFlash: true
}));
router.post('/login', passport.authenticate('local-login'), function(req, res){
res.send(req.user);
});
router.post('/signout', function(req,res){
req.logout();
res.json({redirect: '/'});
});
router.get('/authtest', isAuthenticated, function(req, res){
res.render('authtest', {user: req.user});
});
return router;
};
这是我的护照注册策略:
passport.use('local-signup', new LocalStrategy({
usernameField : 'username',
passwordField : 'password',
passReqToCallback : true
},
function(req, username, password, done){
process.nextTick(function(){
User.findOne({'local.username' : username}, function(err, user){
if(err) return done(err);
if (user) { //username already exists
return done(null, false, {message: 'Username already exists'});
} else if(!req.body.email) { //no email address provided
return done(null, false, {message: 'You must provide an email address!'});
} else {
var newUser = new User();
newUser.local.username = username;
newUser.generateHash(password, function(err, hash){
if(err) return done(err);
newUser.local.password = hash;
});
newUser.email = req.body.email;
newUser.servers = [];
newUser.save(function(err){
if(err) throw err;
return done(null, newUser);
});
};
});
});
}
));
我知道现在查看我的代码似乎我根本没有尝试自己解决这个问题,但这只是我最新的工作代码;在过去的几天里,我一直被困在这个问题上!
任何帮助将不胜感激:)
【问题讨论】:
标签: json angularjs node.js passport.js