我相信我在處理Node.js
驗證使用PassportJS
(特別是passport-local
)的競賽條件。Node.js護照登錄競賽條件
這是我Router
登記:
router.post('/', upload.single('avatar'), function(req, res, next) {
var userType = req.body.userType;
var username = req.body.username;
var password = req.body.password;
var email = req.body.email;
// Convert Buffer data to base64 encoded string
var base64Avatar = new Buffer(req.file.buffer).toString('base64');
var avatar = 'data:' + req.file.mimetype + ';base64,' + base64Avatar;
var createdUser;
if (userType == 'viewer') {
createdUser = new user.User(username, password, email, [], [], avatar).getInstance();
} else if (userType == 'contributor') {
createdUser = new contributor.Contributor(username, password, email, [], [], avatar, []).getInstance();
}
req.login(createdUser, function(err) {
if (err) { return next(err); }
req.session.save(function() {
res.redirect('/user/' + req.user.username);
});
});
});
在User
模型constructor
使用TypeScript
:
constructor(private _username: String, private _password: String, private\
_email: String, private _favorites: Array<any>, private _inbox: Array<any>, \
private _avatar: String) {
this._modelInstance = new userModel({username: _username, password: _\
password, email: _email, favorites: _favorites, inbox: _inbox, avatar: _avata\
r});
this._modelInstance.save();
};
我試圖將async.series
到:
一)模型實例的創建並保存在User類的構造中uctor。
b)createdUser
創建在路由和req.login
請求。
我也嘗試過(如您所見)手動保存session
,並使用重定向作爲回調來確保會話已保存。我也研究過Buffer
以及它似乎是同步的,所以我不認爲這是問題。
如果我使用短字符串(如myAvatar
)調用User
模型,那麼它將正確登錄用戶。只有當頭像字符串變大時纔會這樣。在這種情況下,用戶可以登錄後,但自動登錄不通過req.login
執行。
這也是說,重定向到的用戶配置文件在登錄後沒有顯示,表明它正在保存模型之前嘗試登錄(配置文件頁面進行數據庫查詢,並且它不是還沒有找到任何東西)。然而,重定向後的刷新顯示了個人資料頁面上的數據。
我可以忽略某處的異步問題嗎?