Skip to content

Instantly share code, notes, and snippets.

@jjduhamel
Created October 30, 2015 00:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jjduhamel/ce47c5bc7f1f8027764c to your computer and use it in GitHub Desktop.
Save jjduhamel/ce47c5bc7f1f8027764c to your computer and use it in GitHub Desktop.
'use strict';
var koa = require('koa'),
passport = require('koa-passport'),
FacebookStrategy = require('passport-facebook').Strategy,
Router = require('koa-router'),
Sequelize = require('sequelize');
require('dotenv').load();
/*
* Configure database
*/
var database = new Sequelize(
process.env.DB_DATABASE,
process.env.DB_USERNAME,
process.env.DB_PASSWORD,
{
host: process.env.DB_URL,
dialect: 'postgres',
}
);
var User = database.define('user', {
name: Sequelize.STRING,
facebook_user_id: Sequelize.BIGINT
});
database.sync();
var app = koa();
/*
* Configure Routes
*/
var router = new Router();
router.get('/', function *() {
this.body = "<a href='/auth/facebook'>Login</a>";
});
router.get('/auth/facebook',
passport.authenticate('facebook')
);
router.get('/auth/facebook/callback',
passport.authenticate('facebook', {
successRedirect: '/',
failureRedirect: '/',
})
);
app.use(router.routes());
/*
* Configure Passport
*/
passport.serializeUser(function(user, done) {
done(null, user);
});
passport.deserializeUser(function(user, done) {
done(null, user);
});
passport.use(new FacebookStrategy({
clientID: process.env.FB_OAUTH_ID,
clientSecret: process.env.FB_OAUTH_SECRET,
callbackURL: 'http://localhost:3000/auth/facebook/callback'
}, function(token, tokenSecret, profile, done) {
/* XXX: I think it should look like this
var user = yield User.findOne({
where: { facebook_user_id: profile.id }
});
console.log('---');
console.log(user);
console.log('---');
*/
// XXX: This is the only way I can get it to work
User.findOne({
where: { facebook_user_id: profile.id }
}).then(function(user) {
console.log('---');
console.log(user);
console.log('---');
done(null, user);
});
}));
/*
* Some middleware so we can see what's happening
*/
app.use(function *(next) {
console.log('%s %s - %s ms', this.method, this.url);
yield(next);
});
app.listen(3000);
console.log("listening on http://localhost:3000");
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment