Пишу простенькую авторизацию через сессии и использую переменную req.session. Вот код:
router.route "/"
.get (req, res, next) ->
res.render "auth"
.post (req, res, next) ->
form = new multiparty.Form
form.parse req, (err, fields, files) ->
next err if err
login = fields.login[0]
pass = fields.pass[0]
User.authorize login, pass, (err, user) ->
if err
if err instanceof AuthError
return res.send err.message
else
return next err
req.session.user = user._id
res.send "success"
А вот код который загружает и передает клиенту данные авторизованному юзеру
module.exports = (req, res, next) ->
req.user = res.locals.user = null
if not req.session.user then return do next
User.findById req.session.user, (err, user) ->
next err if err
req.user = res.locals.user = user
do next
Проблема в том что в коллбэке form.parse, req.session.user = user._id не запоминает user._id. При этом если отказаться от multiparty и FormData(на клиенте), и использовать експрессовский bodyParser. Вот так:
router.route "/"
.get (req, res) ->
res.render "auth"
.post (req, res, next) ->
login = req.body.login
pass = req.body.pass
User.authorize login, pass, (err, user) ->
if err
if err instanceof AuthError
return res.send err.message
else
return next err
req.session.user = user._id
res.send "success"
То все работает идеально. Так как же все таки быть если от multiparty нельзя отказаться?