我有一个使用快递和护照的nodeJS应用程序。我试图处理登记护照的要求。我在服务器控制台中收到未知错误:POST / signup 500
第二个问题,任何想法都是为什么它不能快速浏览下面的内容。我知道它不是所有的代码,但也许有明显的东西......?
app.js:
..
var passport = require('passport');
require('./config/passport')(passport);
..
var routes = require('./routes/index')(app, passport);
..
Passport.js定义了我对用户和数据库的处理。它定义了一个名为local-signup的localStragery。
/routes/index.js:
module.exports = function(app, passport) {
..
var express = require('express');
var router = express.Router();
..
router.post('/signup',
passport.authenticate('local-signup', {
successRedirect : '/profile',
failureRedirect : '/signup' })
);
..
return router
}
更新
我的代码实际上正在运行,它正在将新用户放入数据库,它只是应用程序返回500.使用load.log()和反复试验的负载我把它绑定到我从护照上返回的内容战略研究。我有以下代码被点击:
...
} else {
console.log("-] Email is not found, creating new user");
user = {};
user['email'] = email;
user['password'] = bcrypt.hashSync(password, bcrypt.genSaltSync(8), null);
console.log("-] Inserting into db");
userCollection.insert( user, function(err, user) {
if (err) {
console.log("Error: " + err );
console.log("records: " + user );
throw err;
}
console.log("returned user: " + user)
return done(null, user);
它与我回复用户有关。如果我摆脱了这一行而只是返回,它运行正常,但是对身份验证的调用认为它已经失败并且遵循那个重定向而不是成功的那个。问题是我从一个使用mongoose的应用程序获得了这个代码,mongoose将数据库内容包装在一个对象中。我不想这样做,我想直接自己做db调用,就像上面的代码一样。
任何想法?
答案 0 :(得分:1)
您没有在API中使用错误处理。
尝试这样的事情:
passport.authenticate('local-signup', {
successRedirect: '/profile',
failureRedirect: '/login',
failureFlash: true })
...这告诉护照闪电'回调产生的任何错误(假设其中一个被定义为verify
local-signup
阶段的一部分)。
现在,假设应用程序中的local-signup
设置如下:
var local-signup = require('passport-local').Strategy;
...您应该能够非常轻松地对错误处理进行排序。以下是http://passportjs.org/guide/configure/配置文档中的示例 - 请注意如何返回错误:
passport.use(new LocalStrategy(
function(username, password, done) {
User.findOne({ username: username }, function (err, user) {
if (err) { return done(err); }
if (!user) {
return done(null, false, { message: 'Incorrect username.' });
}
if (!user.validPassword(password)) {
return done(null, false, { message: 'Incorrect password.' });
}
return done(null, user);
});
}
));
答案 1 :(得分:0)
对我来说,解决方案是不使用:
passport.authenticate('local-signup', {
可是:
passport.authenticate('local', {
如果您在注册策略时未设置名称,则这是默认设置:
passport.use(new LocalStrategy({
如果您有多个LocalStrategies,则可以传入名称:
passport.use('local-signup', new LocalStrategy({