#set up passport
LocalStrategy = require('passport-local').Strategy
passport.use(new LocalStrategy({usernameField: 'email'}, (email, password, done) ->
User.findOne({ email: email }, (err, user) ->
console.log("findone")
if err?
console.log "error"
return done(err)
if not user
console.log("incorrect username")
return done(null, false, { message: 'Incorrect username.' })
if password isnt user.password
console.log "NOT"
return done(null, false, {message: "Incorrect password" })
console.log "BUT YESS"
done(null,user)
)
))
passport.serializeUser((user, done) ->
done(null, user._id)
)
passport.deserializeUser((id, done) ->
User.findById(id, (err, user) ->
done(err, user)
)
)
Я использую пример LocalStrategy, как найти на http://passportjs.org/guide/username-password/паспорта с курьерским: проблема сериализации с помощью метода пользовательских аутентификации
Теперь моя проблема заключается в том, что, если я введу неверный пароль или неправильное имя пользователя, я получаю ошибка Error: failed to serialize user into session
.
Фактически, в моей функции serializeUser, user
есть false
. Вероятно, это связано с тем, что код буквально возвращает false в качестве второго параметра выше: return done(null, false, {message: "Incorrect password"
})
Но это из документов! Так что я делаю неправильно? Почему у меня проблема с сериализацией, когда параметры неверны? Когда параметры в порядке (имя пользователя и пароль правильные), я могу войти без проблем
EDIT: При комментировании @robertklep вот как я использую функцию аутентификации. В самом деле, потому что мне нужно маршрута в зависимости от себя различным образом роли, я использую паспорт специальный метод (эта деталь добавляется в названии вопроса):
app.post '/login', (req, res, next) ->
passport.authenticate('local', (err, user, info) ->
return next(err) if err?
return res.redirect('/login', { message: req.flash('Access denied')}) if not user?
req.logIn user, (err) ->
if err?
console.log "err! " + err
res.redirect("/", { message: req.flash(err)})
return
if user.role is "admin" or user.role is "auditor"
res.redirect("/dashboard")
else
res.redirect("/start")
)(req, res, next)
Хм, возможно, это зависит от того, как вы называете методы проверки подлинности паспорта, потому что для меня, 'serializeUser' даже не вызывается, когда аутентификация не удается (при пропускании' false' обратного вызова так же, как то, что вы делать). – robertklep