将 Facebook 登录和地理位置数据插入 MongoDB
Posted
技术标签:
【中文标题】将 Facebook 登录和地理位置数据插入 MongoDB【英文标题】:Inserting Facebook login and Geolocation data into MongoDB 【发布时间】:2015-05-24 14:27:24 【问题描述】:我目前正在开展一个项目,其中用户使用 Facebook 登录,查看带有精确位置的地图,然后可以看到也在地图上登录的朋友(距离)。
下一步是将这些数据存储在数据库中。
由于我对使用 MongoDB 还很陌生,因此我想要一些有关如何获取 Facebook 登录/地理位置数据并将其插入数据库的指导。我很乐意从命令行手动将 BSON 对象输入数据库,但我似乎无法在我的代码中找到最好的方法。
代码如下 - 对于获取发布数据并将其放入 MongoDB 数据库的第一步提供一些指导真的很有帮助。谢谢!
var express = require('express')
var passport = require('passport')
var util = require('util')
var FacebookStrategy = require('passport-facebook').Strategy
var logger = require('morgan')
var session = require('express-session')
var sessionStore = require('sessionstore');
var bodyParser = require("body-parser")
var cookieParser = require("cookie-parser")
var methodOverride = require('method-override');
var port = process.env.PORT || 3000
var io = require('socket.io')(http);
var http = require('http').Server(app);
var markers = [];
var server = require('http').createServer(app);
var passportStrategy = require('../utils/passport-strategy');
var MongoClient = require('mongodb').MongoClient;
var assert = require('assert');
var FACEBOOK_APP_ID = "*";
var FACEBOOK_APP_SECRET = "*";
passport.use(passportStrategy.facebook);
passport.serializeUser(function(user, done)
done(null, user);
);
passport.deserializeUser(function(obj, done)
done(null, obj);
);
var sessionData = session(
store: sessionStore.createSessionStore(),
secret: "your_secret",
cookie: maxAge: 2628000000 ,
resave: true,
saveUninitialized: true
);
passport.use(new FacebookStrategy(
clientID: FACEBOOK_APP_ID,
clientSecret: FACEBOOK_APP_SECRET,
callbackURL: "http://localhost:3000/auth/facebook/callback"
,
function(accessToken, refreshToken, profile, done)
process.nextTick(function ()
return done(null, profile);
);
));
var app = express();
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.use(sessionData);
app.use(logger("combined"));
app.use(cookieParser());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded(
extended: true
));
app.use(methodOverride());
app.use(session(
secret: "keyboard cat",
saveUninitialized: true, // (default: true)
resave: true, // (default: true)
));
app.use(passport.initialize());
app.use(passport.session());
app.use(express.static(__dirname + '/public'));
app.get('/', function(req, res)
res.render('index', user: req.user );
);
app.get('/account', ensureAuthenticated, function(req, res)
res.render('account', user: req.user );
);
app.get('/login', function(req, res)
res.render('login', user: req.user );
);
app.get('/auth/facebook',
passport.authenticate('facebook'),
function(req, res)
);
app.get('/auth/facebook/callback',
passport.authenticate('facebook', failureRedirect: '/login' ),
function(req, res)
res.redirect('/');
);
app.get('/logout', function(req, res)
req.logout();
res.redirect('/');
);
app.get('/mapjs', function(req, res)
res.sendFile(__dirname + '/public/map.js');
);
// Socket markers start
io.on('connection', function(socket)
console.log('a user connected');
socket.on('marker', function(data)
data.socketId = socket.id;
markers[socket.id] = data;
console.log('marker latitude: ' + data.lat + ', marker longitude:' + data.lng);
socket.broadcast.emit('show-marker', data);
);
// socket.on('show-marker', )
socket.on('show-user-location', function(data)
socket.broadcast.emit('show-user-location', data);
);
);
app.listen(port, function()
console.log('five minute catch up is on port 3000');
);
// socket markers end
function ensureAuthenticated(req, res, next)
if (req.isAuthenticated()) return next();
res.redirect('/login')
module.exports = server;
【问题讨论】:
【参考方案1】:你能把它去掉,这样你就只插入一些静态数据,然后再将它连接到 facebook 并在那里有套接字。每多一点代码都会妨碍您了解您尝试的更改是否真的在做您想要的。
关于在 mongodb 中以编程方式插入数据的最佳方式,我相信这是文档的相关部分:
http://docs.mongodb.org/manual/core/write-operations-introduction/
db.users.insert(
name: "sue",
age: 26,
status: "A"
)
【讨论】:
以上是关于将 Facebook 登录和地理位置数据插入 MongoDB的主要内容,如果未能解决你的问题,请参考以下文章
用户尝试登录时,iOS App 中的 Facebook 集成问题
用户登录后如何使用社交 API(如 facebook)将数据存储在数据库中