我遍佈所有的文檔,但我似乎無法找到更新憑據的方法。更新或添加passport.js本地策略中的字段?
這是我能夠通過分析代碼來獲取的。
passport.deserializeUser(function(id, done) {
AppUser.findById(id, function(err, user) {
done(err, user);
});
});
DeserializeUser似乎很有用,但我不知道如何使用它來更新或添加字段?
我試圖破解並複製登錄中的邏輯並理解它。
passport.use('local-update', new LocalStrategy({
usernameField : 'username',
passReqToCallback : true
},
function(req, username, done) {
console.log(req)
// asynchronous
// AppUser.findOne wont fire unless data is sent back
// process.nextTick(function() {
// // find a user whose email is the same as the forms email
// // we are checking to see if the user trying to login already exists
// AppUser.findOne({ 'local.email' : email }, function(err, user) {
// // if there are any errors, return the error
// if (err)
// return done(err);
// // check to see if theres already a user with that email
// if (!user) {
// //return done(null, false, req.flash('signupMessage', 'That email is already taken.'));
// return done(null, false);
// } else {
// // if there is a user with that email
// // create the username
// var updateUser = new AppUser();
// // set the user's local credentials
// newUser.local.email = email;
// newUser.local.password = newUser.generateHash(password);
// // save the user
// newUser.update(function(err) {
// if (err)
// throw err;
// return done(null, newUser);
// });
// }
// });
// });
}));
然後在表單提交我做到了。
app.post('/profile', passport.authenticate('local-update', {
successRedirect : '/', // redirect to the secure profile section
failureRedirect : '/signup' // redirect back to the signup page if there is an error
//failureFlash : true // allow flash messages
}));
這會導致重定向失敗。
它不起作用,因爲沒有響應,但我需要在mongoDB中找到模型。我試着首先在控制檯中看到req,這樣我可以看到如何找到模型,但沒有任何顯示。
顯然HACKISH代碼上面,但這是我能做的最好的。我需要一個具體的答案,我確信它很簡單,我在文檔中忽略它!
編輯:這裏的想法是當用戶註冊/登錄提供電子郵件。一旦用戶登錄並創建帳戶,他們可以創建一個用戶名。
編輯:所以我不知道如何使用護照進行更新請求,但在我的路由器中我有這樣的事情。
app.post('/', function(req, res) {
if (req.user) {
AppUser.findOne({ _id: req.user.id }, function (err, user) {
user.local.username = req.body.username;
user.save(function(err) {
if (err){
console.log('Error')
} else {
console.log('Sucess')
}
});
});
}
});
唯一的問題是瀏覽器的默認操作,它提交表單並使頁面無限重載。但它確實更新了我的mongodb模型。我必須插入Schema,並且必須在護照註冊邏輯中添加該屬性。
但是我可以將這個邏輯添加到我的客戶端代碼中,並將POST方法放入主幹中,並且應該可以工作!
你的意思是'req.body'不包含你需要的字段? – jpgc
它應該給我我需要的東西,但是我無法得到響應服務器端CLI控制檯的請求,也就是說,一旦它出現在控制檯中,我就可以訪問它,但現在我不知道。總的來說,我很新,感到困惑,但是當我能夠回到成功的Redirect時,我會變得更好。 –
它也需要一些mongodb查詢我嘗試了'AppUser.update({'local.email':'[email protected]'}, {$ set:{「local.email」:「Warner」} } );'靜態的東西,但如果回調返回false,查詢不會執行認爲'function(req,username,done)'中的任何東西'無用。我爲這個特定的實例設置localStrategy顯然有些問題。 –