Created
April 10, 2012 03:53
-
-
Save yusugomori/2348215 to your computer and use it in GitHub Desktop.
app.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* This gist contains /app.js and /config/index.js | |
*/ | |
// My SocketStream app | |
var http = require('http') | |
, ss = require('socketstream') | |
, express = require('express') | |
, everyauth = require('everyauth'); | |
var config = (require('./config')).index(ss); // 設定は /config/index.js にまとめる。 | |
// ...(中略、ss.client.define)... | |
// facebook auth settings | |
everyauth.facebook | |
.appId(config.fb_app_id) | |
.appSecret(config.fb_app_secret) | |
.scope('email') | |
.handleAuthCallbackError( function(req, res){ | |
// /auth/facebook/callback?error_reason= ... | |
res.serve('login'); | |
}).findOrCreateUser( function(session, accessToken, accessTokExtra, fbUserMetadata){ | |
session.userId = fbUserMetadata.id; | |
session.name = fbUserMetadata.name; | |
session.save(); | |
return true; | |
}).redirectPath('/'); | |
everyauth.facebook.moduleErrback( function (err) { // Time Out etc... | |
res.serve('login'); | |
}); | |
everyauth.everymodule.handleLogout( function (req, res) { // Logout | |
req.logout(); | |
delete req.session.userId; | |
delete req.session.name; | |
res.redirect('/'); | |
}); | |
// Using express.js server(正規表現が便利!) | |
ss.http.middleware.append(everyauth.middleware()); | |
var app = express.createServer( ss.http.middleware ); | |
// Routing Example | |
app.get('/', function(req, res) { | |
if (user_signed_in(req) !== true) { | |
res.serve('login'); | |
} else { | |
res.serve('top'); | |
} | |
}); | |
// Configure Server | |
if (ss.env == 'production') ss.client.packAssets(); | |
var server = app.listen(3000); | |
ss.start(server); | |
// Private methods | |
function user_signed_in(req) { | |
if (typeof req.session == 'undefined' || typeof req.session.userId == 'undefined') { | |
return false; | |
} else { | |
return true; | |
} | |
} | |
/* | |
* /config/index.js | |
*/ | |
exports.index = function(ss){ | |
construct(ss); | |
var fb = fb_app(ss.env); | |
return { | |
fb_app_id: fb.app_id, | |
fb_app_secret: fb.app_secret | |
}; | |
}; | |
function construct(ss) { | |
ss.client.formatters.add(require('ss-coffee')); | |
ss.client.formatters.add(require('ss-jade')); | |
ss.client.formatters.add(require('ss-less')); | |
ss.client.templateEngine.use(require('ss-hogan')); | |
} | |
// private methods | |
function fb_app(env) { | |
if(env == 'production') { | |
var app_id = 'YOUR_APP_ID_FOR_PRODUCTION'; | |
var app_secret = 'YOUR_APP_SECRET_FOR_PRODUCTION'; | |
} else { | |
var app_id = 'YOUR_APP_ID_FOR_DEVELOPMENT'; | |
var app_secret = 'YOUR_APP_SECRET_FOR_DEVELOPMENT'; | |
} | |
return { | |
app_id: app_id, | |
app_secret: app_secret | |
}; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment