更新req.user我有一個使用護照JS創建本地登錄策略擊中使用Sequelize ORM本地Postgres數據庫一個非常簡單的網站。強制Sequelize在快遞航線
用戶模型看起來是這樣的:
module.exports = function(sequelize, DataTypes) {
return sequelize.define('user', {
id: {
primaryKey: true,
type: DataTypes.UUID,
defaultValue: DataTypes.UUIDV4
},
email: DataTypes.STRING,
password: DataTypes.STRING,
}, {
classMethods: {
generateHash: function(password) {
return bcrypt.hashSync(password, bcrypt.genSaltSync(8), null);
},
},
instanceMethods: {
validPassword: function(password) {
return bcrypt.compareSync(password, this.password);
}
},
getterMethods: {
someValue: function() {
return this.someValue;
}
},
setterMethods: {
someValue: function(value) {
this.someValue = value;
}
}
});
}
似乎一切都工作得很好。我可以使用此策略註冊,登錄並查看數據。
我也是用快遞,並有多種途徑設置。 req.user
似乎設置正確,因爲我可以與此對象的所有字段進行交互。
考慮其工作正常樣本路線:
app.get('/profile', isLoggedIn, function(req, res) {
res.render('profile.ejs', {
user : req.user
});
});
我的序列化/反序列化方法:
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findById(id).then(function(user) {
done(null, user);
}).catch(function(e) {
done(e, false);
});
});
所以,按照護照JS文件,用戶會話似乎正確設置和迷上了Express。
麻煩的是,我不能更新任何在用戶對象的字段。
如果我有以下途徑:
app.get('/change-email', function(req, res) {
req.user.email = req.body.email;
res.status(200).end();
});
什麼也沒有發生在數據庫中。
這是非常相似的,除了this question它,即使在註銷後Sequalize,用戶對象永遠持續出現,並再次插入。
我也曾嘗試:req.session.passport.user.email = req.body.email
雖然我不認爲這會解決這個問題,我也試着撥打login
新的用戶對象,但這個產生500錯誤。根據Passport JS文檔,可以調用哪些如此有限的函數,我開始懷疑這種功能是否可行。
我不知道該怎麼從這裏試試。我如何使用Sequelize更新我的user
對象?
任何幫助將不勝感激!謝謝!
你已經在你的數據庫的用戶?你可能需要在'serializeUser'函數中填充它們。當護照可以驗證新用戶以添加到會話時,這會被調用。 –
我試過兩種方法:讓用戶在我的表中,然後放下表讓Sequalize自己重新創建它;兩種情況下的結果都是相同 –