Я просмотрел всю документацию, но, похоже, не могу найти способ обновить учетные данные.
Это то, что я смог уловить, проанализировав код.
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. Сначала я пытаюсь увидеть запрос в консоли, чтобы, возможно, я мог увидеть, как найти модель, но ничего не отображается.
Очевидно 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. Мне пришлось добавить дополнение к схеме, и мне пришлось добавить это свойство в логику регистрации паспорта.
Но я мог бы просто добавить эту логику в свой код на стороне клиента и перебросить метод POST в магистраль, и это должно сработать!
req.body
не содержит нужных вам полей? - person jpgc   schedule 27.03.2014AppUser.update({'local.email' : '[email protected]'}, { $set: { "local.email": "Warner" } });
что-то статическое, но если обратный вызов возвращает false, запрос не будет выполняться, считая что-либо вfunction(req, username, done)
бесполезным. Очевидно, что-то не так с тем, как я настроил localStrategy для этого конкретного экземпляра. - person Michael Joseph Aubry   schedule 27.03.2014res.send(200)
иres.send(403)
вместоconsole.log('Success')
иconsole.log('Error')
. Это проблема? - person jpgc   schedule 27.03.2014res.redirect('/');
, но это работает феноменально. Я не понимаю, почему это не лучшее решение, есть проверка, если пользователь вошел в систему, и мне все кажется хорошо. Спасибо, что нашли время, чтобы помочь, рада, что мы его получили. Кто-нибудь видит что-то не так, пожалуйста, возразите сейчас! :) - person Michael Joseph Aubry   schedule 27.03.2014