更新Passport + MongoDB中的用户logging
我试图通过POST请求更新护照中的用户logging。 我已经看了各种教程和以前对类似问题的回答 。 我已经实现了以下代码:
var User = require("../models/user"); router.get("/settings/profile/:id", isLoggedIn, function(req,res){ res.render("profile/profilesettings", { User: req.user }); }); router.post("/settings/profile/:id", isLoggedIn, function(req,res){ User.update({_id: req.session.passport.user.id}, { email: req.body.email, imageUrl: req.body.imageUrl, bio: req.body.bio }, function (err){ console.log(err); }); res.render("profile/profilesettings", { User: req.user }); })
这是执行更新function的forms。
<form class="form-horizontal" action="/settings/profile/<%= currentUser._id %>" method="POST"> <div class="form-group"> <label class="control-label col-sm-2" for="username">Username:</label> <div class="col-sm-10"> <input type="text" class="form-control" id="username" name="username" placeholder="username" value="<%= currentUser.username %>" disabled> </div> </div> <div class="form-group"> <label class="control-label col-sm-2" for="email">Email:</label> <div class="col-sm-10"> <input type="text" class="form-control" id="email" name="email" placeholder="email" value="<%= currentUser.email %>"> </div> </div> <div class="form-group"> <label class="control-label col-sm-2" for="profileimage">Upload Image:</label> <div class="col-sm-10"> <div class="input-group"> <span class="input-group-btn"> <span class="btn btn-default btn-file"> Browse.. <input type="file" id="profileimage"> </span> </span> <input type="text" class="form-control" id="profileimage" name="profileimage" placeholder="Profile Pic"> </div> </div> </div> <div class="form-group"> <label class="control-label col-sm-2" for="bio">Bio:</label> <div class="col-sm-10"> <textarea class="form-control" rows="5" id="bio" name="bio" placeholder="Tell us about yourself!"><%= currentUser.bio %></textarea> </div> </div> <div class="form-group"> <div class="col-sm-offset-2 col-sm-10"> <button class="btn btn-lg btn-primary">Save Changes</button> </div> </div> </form>
我也有以下isLoggedIn中间件:
function isLoggedIn(req, res, next) { if (req.isAuthenticated()) { return next(); } res.redirect("/login"); }
该应用程序运行,但是当我点击“保存更改”返回一个空结果并没有更新。
这是因为您在文档更新之前回复请求。 你应该移动你的回复( res.render(...
)在更新callback中:
User.update({_id: req.session.passport.user.id}, { email: req.body.email, imageUrl: req.body.imageUrl, bio: req.body.bio }, function (err){ if (err) console.log(err); res.render("profile/profilesettings", { User: req.user }); });
1) req.user._id
和req.session.passport.user
都是一样的。 您可以改用req.user._id。
2)我的大多数护照申请没有req.session.passport.user.id
,而req.session.passport.user
本身是一个ID。
3)尝试在callback内嵌套
router.post("/settings/profile/:id", isLoggedIn, function(req, res, next){ User.update({ id: req.session.passport.user }, { email: req.body.email, imageUrl: req.body.imageUrl, bio: req.body.bio }, function(err, user) { if (err) return next(err); User.findById(req.user._id, function(err, user) { if (err) return next(err); return res.render('profile/profilesettings', { user:user }); }); }); });
- 基于Mailchimp合并标签创build独特的页面
- req.session.passport为空,反序列化用户未调用 – ExpressJS,护照
- Express-mysql-session阻止passport deserializeUser运行
- 如何在Formidable(Node.js)中取消用户上传?
- 在Express和Passport之间检测Cookie
- Heroku雪松堆栈上的Node.js端口问题
- 脸书authentication与护照。 无法读取未定义错误的属性“0”
- 在使用作业队列(kue / node / express)时将响应发送回请求者
- NodeJS:callback不是一个函数 – 电子邮件validation