2013-03-22 39 views
1

我正在使用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) 
+0

在你的'exports.create',其中和/或如何是用戶初始化? – robertklep 2013-03-22 20:34:05

+0

嗯,我正在使用護照,所以就在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

+0

護照不會奇蹟般地創建全局變量(*或*創建新用戶),您在'create()'中使用的'user'變量必須來自某處。 – robertklep 2013-03-22 20:50:55

回答

0

我覺得這是你的問題:

var mongoose = require('mongoose') 
    , Users = mongoose.model("Users") 
    , user = new Users(); // <-- this creates a module variable `user`, but only once        
         //  (the first time the file is require()'d) 

// Create 
exports.create = function (steamID) { 

    // ...which is being re-used every time this function is called. 
    // Instead, you need to create the new user here: 
    var user = new Users; 

    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); 
    }); 
}; 
+0

你是最好的人,謝謝,工作。 – 2013-03-22 21:06:18