Skip to content

Commit

Permalink
Let's try local auth
Browse files Browse the repository at this point in the history
  • Loading branch information
jxa committed Jan 25, 2013
1 parent 8078225 commit 0d8fd22
Show file tree
Hide file tree
Showing 6 changed files with 80 additions and 34 deletions.
2 changes: 1 addition & 1 deletion app/http_routes.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ var authSettings = require(path.join(app.root, "config", "authentication"));
module.exports = function(server) {
var authenticate = function(request, response, next) {
if (request.isAuthenticated()) return next();
response.redirect("/authenticate");
response.redirect("/login");
};

server.get("*", authenticate, function(request, response) {
Expand Down
1 change: 1 addition & 0 deletions app/views/layout.jade
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,4 @@ html
script(type="text/javascript", src=javascriptUrl)

body
block content
15 changes: 15 additions & 0 deletions app/views/login.jade
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
!!! 5
html
head
title Spotbox
link(rel="stylesheet", type="text/css", href=stylesheetUrl)

body
block flash

form(action="/login", method="POST")
label(for="username") Username
input#username(type="text", name="username")
label(for="email") Username
input#password(type="password", name="password")
input(type="submit") Let's do this
5 changes: 3 additions & 2 deletions boot.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,12 @@ function initExpress() {
this.use(express.session(underscore.extend({store: sessionStore}, settings.session)));
this.use(passport.initialize());
this.use(passport.session());
authentication(application);
httpRoutes(application);
this.set("views", path.join("app", "views"));
this.set("view engine", "jade");
this.set("view options", {layout: false});
authentication(application);
httpRoutes(application);

});

assetbuilder.registerViewHelpers(application);
Expand Down
90 changes: 59 additions & 31 deletions config/authentication.js
Original file line number Diff line number Diff line change
@@ -1,19 +1,54 @@
var path = require("path");
var underscore = require("underscore");
var passport = require("passport")
var Strategy = require("passport-google-oauth").OAuth2Strategy;
var app = require(path.join(__dirname, "app"));
var settings = require(path.join(app.root, "config", "settings"));
var db = require(path.join(app.root, "config", "database"));

var passportSettings = {
callbackURL: "/auth/google/callback",
scope: [
"https://www.googleapis.com/auth/userinfo.profile",
"https://www.googleapis.com/auth/userinfo.email"
]
var passport = require("passport");
var passportStrategy = require("passport-local").Strategy;

var users = {
"felix": "foo",
"john": "foo",
"leon": "foo",
"doel": "foo",
"adam": "foo",
"darby": "foo",
"chandu": "foo",
"danko": "foo",
"justine": "foo",
"aaron": "foo"
};


var id = 0;
var users = [
{id: id++, name: "felix", password: "password"},
{id: id++, name: "john", password: "password"},
{id: id++, name: "jerry", password: "password"},
{id: id++, name: "leon", password: "password"},
{id: id++, name: "doel", password: "password"},
{id: id++, name: "adam", password: "password"},
{id: id++, name: "chandu", password: "password"},
{id: id++, name: "scott", password: "password"},
{id: id++, name: "darby", password: "password"},
{id: id++, name: "danko", password: "password"},
{id: id++, name: "justine", password: "password"},
{id: id++, name: "derek", password: "password"},
{id: id++, name: "aaron", password: "password"},
{id: id++, name: "delisa", password: "password"},
{id: id++, name: "gina", password: "password"},
{id: id++, name: "shelley", password: "password"},
{id: id++, name: "aly", password: "password"},
{id: id++, name: "ken", password: "password"}
];


passport.use(new passportStrategy(function(username, password, done) {
var user = underscore.find(users, function(u){ return u.name === username; });
if (user) {
return done(null, user);
} else {
return done(null, false, {message: "You suck at logging in."});
}
}));

passport.serializeUser(function(user, done) {
done(null, user);
});
Expand All @@ -22,27 +57,20 @@ passport.deserializeUser(function(obj, done) {
done(null, obj);
});

passport.use(new Strategy(underscore.extend(passportSettings, settings.google_auth), function(accessToken, refreshToken, profile, hollaback) {
var user = profile["_json"];
if (!user.email.match("@" + settings.google_auth.domain)) return hollaback(null, false);
db.collection("users", function(error, collection) {
if (error) return hollaback(error);
collection.update({id: user.id}, user, {safe: true, upsert: true}, function(error) {
hollaback(null, user);
});
});
}));

// authentication routes
module.exports = function(server) {
server.get("/authenticate", function(request, response, next) {
if (app.env === "development") {
request.login(settings.user, {}, function() { response.redirect("/")});
} else {
passport.authenticate("google", {scope: passportSettings.scope})(request, response, next);
}
}, function() {});
server.get("/auth/google/callback", passport.authenticate("google"), function(request, response) {
server.get("/login", function(request, response) {
response.render("login");
});

server.post("/login",
passport.authenticate("local", {failureRedirect: "/login"}),
function(request, response) {
response.redirect("/");
});

server.get("/logout", function(request, response){
request.logout();
response.redirect("/");
});
};
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
"express": "3.0.0beta4",
"cookie": "0.0.4",
"passport": "0.1.10",
"passport-local": "0.1.6",
"passport-google-oauth": "0.1.4",
"jade": "0.26.3",
"socket.io": "0.9.6",
Expand Down

0 comments on commit 0d8fd22

Please sign in to comment.