everyauth与快递(样板)应用程序

我正在尝试将Facebooklogin集成到一个快速应用程序中(使用https://github.com/robrighter/node-boilerplate中的节点样板代码)。

这里是server.js代码:

//setup Dependencies var connect = require('connect') , express = require('express') , io = require('socket.io') , port = (process.env.PORT || 3000) , conf = require('./conf') , everyauth = require('everyauth') , facebookGraphApi = require('Facebook_Graph_API'); //Set up express server var server = express.createServer(); //everyauth helper method for express apps everyauth.debug = true; //setup everyauth var usersById = {}; var nextUserId = 0; function addUser (source, sourceUser) { var user; if (arguments.length === 1) { // password-based user = sourceUser = source; user.id = ++nextUserId; return usersById[nextUserId] = user; } else { // non-password-based user = usersById[++nextUserId] = {id: nextUserId}; user[source] = sourceUser; } return user; } var usersByFbId = {}; everyauth.everymodule .findUserById( function (id, callback) { callback(null, usersById[id]); }); //<-- this has to go before the server configure everyauth .facebook .appId(conf.fb.appId) .appSecret(conf.fb.appSecret) .findOrCreateUser( function (session, accessToken, accessTokenExtra, fbUserMetadata) { return usersByFbId[fbUserMetadata.id] || (usersByFbId[fbUserMetadata.id] = addUser('facebook', fbUserMetadata)); }) .redirectPath('/');//note that this can be some other path than / everyauth.helpExpress(server); //configure express server server.configure(function(){ server.set('views', __dirname + '/views'); server.set('view options', { layout: false }); server.use(connect.bodyParser()); server.use(express.cookieParser()); server.use(everyauth.middleware()); server.use(express.session({ secret: "shhhhhhhhh!"})); server.use(connect.static(__dirname + '/static')); server.use(server.router); }); //setup the errors server.error(function(err, req, res, next){ if (err instanceof NotFound) { res.render('404.jade', { locals: { title : '404 - Not Found' ,description: '' ,author: '' ,analyticssiteid: 'XXXXXXX' },status: 404 }); } else { res.render('500.jade', { locals: { title : 'The Server Encountered an Error' ,description: '' ,author: '' ,analyticssiteid: 'XXXXXXX' ,error: err },status: 500 }); } }); //start the server server.listen(port); //Setup Socket.IO var io = io.listen(server); io.sockets.on('connection', function(socket){ console.log('Client Connected'); socket.on('message', function(data){ socket.broadcast.emit('server_message',data); socket.emit('server_message',data); }); socket.on('disconnect', function(){ console.log('Client Disconnected.'); }); }); /////////////////////////////////////////// // Routes // /////////////////////////////////////////// /////// ADD ALL YOUR ROUTES HERE ///////// server.get('/', function(req,res){ res.render('index.jade', { locals : { title : 'Promenade' ,description: 'Prom utilities' ,author: 'A Friday Lab production' ,analyticssiteid: 'XXXXXXX' } }); }); server.get('/receiveToken', function(req, res){ //once you have received the token, connect to the graph and get some data. var FB_ID = 'me'; var ACCESS_TOKEN = 'test'; var graph = new facebookGraphApi(); var facebookUser = new graph.User(FB_ID,ACCESS_TOKEN); }); //A Route for Creating a 500 Error (Useful to keep around) server.get('/500', function(req, res){ throw new Error('This is a 500 Error'); }); //The 404 Route (ALWAYS Keep this as the last route) server.get('/*', function(req, res){ throw new NotFound; }); function NotFound(msg){ this.name = 'NotFound'; Error.call(this, msg); Error.captureStackTrace(this, arguments.callee); } console.log('Listening on http://0.0.0.0:' + port ); 

这是我的玉观点:

 block content div a(id='sender')='Send a Message' ul(id='reciever') div - if (!everyauth.loggedIn) h2 Not Authenticated #fb-login.fb_button(style='background-position: left -188px') a.fb_button_medium(href='/auth/facebook') span#fb_login_text.fb_button_text Connect with Facebook - else h2 Authenticated - if (everyauth.facebook) h3 Facebook User Data p= JSON.stringify(everyauth.facebook.user) p= 'facebook access token is '+ everyauth.facebook.accessToken h3 a(href='/logout') Logout 

但是,当我启动Web应用程序,然后单击“连接Facebook”链接,我的应用程序崩溃,我得到以下错误:

facebook getSession步骤很有希望:session; 然而,这一步没有任何回报。 通过返回预期值来修复该步骤,或者通过返回一个承诺所述值的Promise来修复该步骤。

我怀疑鉴定正在工作,因为我被redirect到这个url:

=“> HTTP://本地主机:3000 / AUTH /实/callback代码= AQC1WKuD8Og_I0QWMUn9OzDy7hLdHip6DkWI2DgbG0yOgnPXkAJ2yMCWecjo7AfSfPcGFCc9nXIHPAqIZcb779WFT-NNCgKBFyoHu-Urq5fpgPfJgXC8QCJhcgmteXmh-VIgMKRGJnfKObMW2lvLFWQrnUjEBs3HveZjV1MecuhUr4MqIUPv6K3Kb2hCKpHDS0g#=

而且看起来像是某种access_token给我的。

(我不认为这是local.host与localhost的问题,因为everyauth示例在localhost:3000中正常工作)

谢谢!

(另外,如果有人能够解释我的问题为什么被低估了,我将在未来尝试改进我的问题)

可能有几件事情在这里出错。 但我会尝试的第一件事是将express.session放在everyauth.middleware和express.cookieParser之后。