diff --git a/lib/auth-facebook/component.json b/lib/auth-facebook/component.json index 601894962a..04316dd0be 100644 --- a/lib/auth-facebook/component.json +++ b/lib/auth-facebook/component.json @@ -3,7 +3,8 @@ "dependencies": { "visionmedia/page.js": "1.3.7", "component/t": "1.0.0", - "component/classes": "1.2.0" + "component/classes": "1.2.0", + "component/cookie": "^1.1.1" }, "locals": [ "view", diff --git a/lib/auth-facebook/form.js b/lib/auth-facebook/form.js index 9595fdd218..46666649cd 100644 --- a/lib/auth-facebook/form.js +++ b/lib/auth-facebook/form.js @@ -1,5 +1,6 @@ var config = require('config'); var t = require('t'); +var cookie = require('cookie'); var title = require('title'); var View = require('view'); var template = require('./template'); @@ -8,8 +9,15 @@ var classes = require('classes'); module.exports = function form (ctx, next) { if (!config.facebookSignin) return next(); + var flashMessage = cookie('flash-message'); + + if (flashMessage) { + flashMessage = JSON.parse(flashMessage); + cookie('flash-message', null); + } + // Build signin view with options - var view = new View(template); + var view = new View(template, { flashMessage: flashMessage }); // Display section content classes(document.body).add('auth-facebook-form-page'); diff --git a/lib/auth-facebook/routes.js b/lib/auth-facebook/routes.js index 1880b85a98..c601508c63 100644 --- a/lib/auth-facebook/routes.js +++ b/lib/auth-facebook/routes.js @@ -20,22 +20,24 @@ var app = module.exports = express(); * Facebook Auth routes */ -app.get('/auth/facebook', - passport.authenticate('facebook', { - scope: config.auth.facebook.permissions - }) -); - -app.get('/auth/facebook/callback', - passport.authenticate('facebook', { failureRedirect: '/' }), - function(req, res) { - // After successful authentication - // redirect to homepage. - log('Log in user %s', req.user.id); - jwt.setUserOnCookie(req.user, res); +app.get('/auth/facebook', passport.authenticate('facebook', { + scope: config.auth.facebook.permissions +})); + +app.get('/auth/facebook/callback', function(req, res, next) { + passport.authenticate('facebook', function(err, user, message) { + if (err) return next(err); + + if (!user) { + if (message) res.cookie('flash-message', JSON.stringify(message)); + return res.redirect('/signin'); + } + + log('Log in user %s', user.id); + jwt.setUserOnCookie(user, res); return res.redirect('/'); - } -); + })(req, res, next); +}); app.post('/auth/facebook/deauthorize', function(req, res) { log('Parsing call to "/auth/facebook/deauthorize".'); diff --git a/lib/auth-facebook/strategy.js b/lib/auth-facebook/strategy.js index 5833fcec5d..86fdf1e8ae 100644 --- a/lib/auth-facebook/strategy.js +++ b/lib/auth-facebook/strategy.js @@ -3,6 +3,7 @@ var passport = require('passport'); var FacebookStrategy = require('passport-facebook').Strategy; var User = require('lib/models').User; var utils = require('lib/utils'); +var t = require('t-component'); /** * Register Facebook Strategy @@ -22,7 +23,7 @@ module.exports = function() { if (!user) { if (!profile.emails) { - return done(new Error(t('signup.facebook.need-email-error'))); + return done(null, false, { message: t('signup.facebook.need-email-error') }); } return signup(profile, accessToken, done); } diff --git a/lib/auth-facebook/template.jade b/lib/auth-facebook/template.jade index 2634467211..f20e15e182 100644 --- a/lib/auth-facebook/template.jade +++ b/lib/auth-facebook/template.jade @@ -4,6 +4,8 @@ i.icon-signin h1= t('signin.login-to') + ' ' + t('common.app-name') form(action="/auth/facebook", method="get", role="form") + - if (flashMessage) + p= flashMessage.message button.btn-facebook(type="submit") span.flaticon.social.facebook = t('signin.login-with-facebook')