我正在使用Heroku/Mongolab(我試過用MongoHQ),並且標題顯示了我的設置。這裏是我的package.json:用戶被覆蓋,但僅在Node.js/Mongoose/Passport/Connect-Mongo應用程序中有時會被覆蓋
"name": "metatf-web",
"version" : "0.0.3",
"dependencies": {
"express": "*",
"ejs": ">=0.4.2",
"passport": "*",
"passport-steam": "*",
"validator": "*",
"mongoose" : "*",
"connect-mongo" : "latest",
"mongodb" : "latest"
}
基本上當我創建一個新用戶,我的數據庫覆蓋在數據庫中的用戶,但只有有時。這裏是我的用戶的模式:
/**
* Module dependencies
*/
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
/**
* User Schema
*/
module.exports = function() {
var Users = new Schema({
steamid : { type: String }
, regdate : { type: Date, default: Date.now }
, avatar : { type: String, default: "none" }
, isadmin : { type: String, default: "no" }
});
mongoose.model("Users", Users);
};
下面是我用它來確定用戶是否在數據庫中的功能,以及一個如果不是:
var checkIfUserAddToDbIfNot = function(req, res, next) {
var steamID = req.user;
require('./controllers/user_controller').get(steamID, function(err, doc) {
console.log(doc);
if (!doc) { // User not found
require('./controllers/user_controller').create(steamID);
console.log('User added');
}
});
return next();
};
而且我user_controller(CRUD):
/**
* Module dependencies.
*/
var mongoose = require('mongoose')
, Users = mongoose.model("Users")
, user = new Users();
// Create
exports.create = function (steamID) {
if (steamID == 76561197991291041) { // Add me as an admin for when database resets.
user.isadmin = 'yes';
} else {
user.isadmin = 'no';
}
user.steamid = steamID;
user.save(function (err, callback) {
if (err) throw err;
console.log('User ' + user.steamid + ' added');
console.log('Admin: ' + user.isadmin);
});
};
// Read
exports.get = function (steamID, fn) {
Users.findOne({ steamid: steamID }, function (err, doc) {
if (err) return err;
if (doc) {
fn(null, doc);
} else {
fn(null, null); // User not found
}
});
};
這裏是調用檢查用戶功能的地方:
app.get('/auth/steam/return',
passport.authenticate('steam', { failureRedirect: '/' }), checkIfUserAddToDbIfNot, function (req, res) {
res.redirect('/');
});
最後這裏是我的連接 - 蒙戈的東西:
app.use(express.session({
secret: 'dont be walmarting',
store: new MongoStore(sess_conf.db),
cookie: {
maxAge: new Date(Date.now() + 1209600000), // DO NOT CHANGE
expires: new Date(Date.now() + 1209600000) // DO NOT CHANGE
},
maxAge : new Date(Date.now() + 1209600000), // DO NOT CHANGE
expires: new Date(Date.now() + 1209600000) // DO NOT CHANGE
}));
這裏任何幫助,將不勝感激,我不能爲我的生命弄清楚爲什麼用戶被覆蓋。我在網站中添加新用戶之前已經嘗試清除Cookie,因爲我認爲這是Connect-Mongo會話,但這不起作用。感謝任何能夠幫助我的人。
編輯:我初始化護照會議略低於這一點:
// Initialize Passport! Also use passport.session() middleware, to support
// persistent login sessions (recommended).
app.use(passport.initialize());
app.use(passport.session());
app.use(app.router);
// END APP CONFIG (annotated)
在你的'exports.create',其中和/或如何是用戶初始化? – robertklep 2013-03-22 20:34:05
嗯,我正在使用護照,所以就在cookie會話的東西下,我讓護照處理工作: }, maxAge:new Date(Date.now()+ 1209600000),//請勿更改 到期日期:新日期(Date.now()+ 1209600000)//不要更改 })); //初始化護照!還使用passport.session()中間件,以支持 //持續登錄會話(推薦)。 app.use(passport.initialize()); app.use(passport.session()); app.use(app.router); }); – 2013-03-22 20:43:49
護照不會奇蹟般地創建全局變量(*或*創建新用戶),您在'create()'中使用的'user'變量必須來自某處。 – robertklep 2013-03-22 20:50:55