快递/注册500与护照的未知错误
我有一个nodeJS应用程序使用快递和护照。 我试图处理login后的护照发送请求。 我的服务器控制台中得到一个未知的错误:POST /注册500
- 第一个问题,我该如何debugging呢? 有什么方法可以让我得到更多关于为什么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.使用console.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);
它与我返回的用户有关。 如果我摆脱了这条线,而只是返回,它的工作正常,但authentication的呼吁认为它已经失败,并遵循redirect,而不是成功的。 问题是我从一个应用程序中得到了这个代码,它使用了将数据库内容包装在一个对象中的mongoose。 我不想这样做,我想直接做数据库调用自己像上面的代码。
有任何想法吗?
您没有使用API中的error handling。
尝试这样的事情,而不是:
passport.authenticate('local-signup', { successRedirect: '/profile', failureRedirect: '/login', failureFlash: true })
…这告诉护照“闪烁”由callback产生的任何错误(假设有一个定义为local-signup
verify
阶段的一部分)。
现在,假设您的应用程序的local-signup
是这样设置的:
var local-signup = require('passport-local').Strategy;
…你应该能够很容易地sortingerror handling。 以下是http://passportjs.org/guide/configure/上的configuration文档示例 – 注意如何返回错误:
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); }); } ));
对我来说,解决scheme是不使用:
passport.authenticate('local-signup', {
但:
passport.authenticate('local', {
如果在注册策略时没有设置名称,则这是默认设置:
passport.use(new LocalStrategy({
如果您有多个LocalStrategies,则可以传入一个名称:
passport.use('local-signup', new LocalStrategy({