Skip to content

Instantly share code, notes, and snippets.

@yusugomori
Created April 10, 2012 03:53
Show Gist options
  • Save yusugomori/2348215 to your computer and use it in GitHub Desktop.
Save yusugomori/2348215 to your computer and use it in GitHub Desktop.
app.js
/*
* 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