app/templates/modules/Security.coffee
passport = require 'passport'
User = require './models/User'
GoogleStrategy = require("passport-google-oauth").OAuth2Strategy
config = require "../config"
passport.serializeUser (user, done) ->
done null, user?._id?.toString()
passport.deserializeUser (id, done) ->
done null, new User _id: id
guard = (req, res, next) ->
if req.isAuthenticated()
next()
else
res.statusCode = 403
res.end()
module.exports = class Security
@for: (expressApp) ->
@app = expressApp
@app.use passport.initialize()
@app.use passport.session()
passport.use new GoogleStrategy
clientID: config.googleAppId
clientSecret: config.googleAppSecret
callbackURL: config.googleAppRedirect,
(accessToken, refreshToken, profile, done) ->
User.getOrCreateByGoogleId
googleId: profile._json.id
email: profile._json.email,
done
authenticate = passport.authenticate "google",
successRedirect: '/app'
failureRedirect: '/'
scope: ['https://www.googleapis.com/auth/userinfo.email']
@app.get "/login/google", authenticate
@app.get config.googleRedirectRoute, passport.authenticate("google"), (req, res) ->
res.redirect "/app"
@app.get "/logout", (req, res) ->
req.logout()
res.redirect "/"
@protect: (path) ->
@app.all path, guard