用户被覆盖,但有时仅在Node.js/Mongoose/Passport/Connect-Mongo应用中被覆盖
我正在使用Heroku/Mongolab,我已经在MongoHQ上试过了,标题显示了我的设置。这是我的package.json:用户被覆盖,但有时仅在Node.js/Mongoose/Passport/Connect-Mongo应用中被覆盖,node.js,mongoose,passport.js,mlab,Node.js,Mongoose,Passport.js,Mlab,我正在使用Heroku/Mongolab,我已经在MongoHQ上试过了,标题显示了我的设置。这是我的package.json: "name": "metatf-web", "version" : "0.0.3", "dependencies": { "express": "*", "ejs": ">=0.4.2", "passport": "*", "passport-steam": "*", "validator": "*", "mong
"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();
};
和我的用户控制器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
}
});
};
下面是调用check user函数的地方:
app.get('/auth/steam/return',
passport.authenticate('steam', { failureRedirect: '/' }), checkIfUserAddToDbIfNot, function (req, res) {
res.redirect('/');
});
最后是我的connect mongo资料:
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
}));
如果您能在这里提供帮助,我将不胜感激。我一辈子都搞不清楚用户被覆盖的原因。我曾尝试在网站中添加新用户之前清除cookies,因为我认为这是连接Mongo会话,但这不起作用。谢谢所有能帮我的人
编辑:我正在下面初始化Passport会话:
// 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中,用户在何处和/或如何初始化?嗯,我使用的是passport,所以就在cookie会话内容下,我让passport处理工作:},maxAge:new DateDate.now+1209600000,//不更改过期日期:new DateDate.now+1209600000//不更改};//初始化护照!还可以使用passport.session中间件来支持//建议的持久登录会话。app.usepassport.initialize;app.usepassport.session;app.useapp.router;};Passport不会神奇地创建全局变量或创建新用户,您在创建中使用的用户变量必须来自某个地方。哦,这里很抱歉:var mongoose=require'mongoose',users=mongoose.modelUsers,user=new users;这些都是我在用户控制器中的模块依赖项。您是否可以编辑您的问题并将代码插入正确的文件/位置
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);
});
};