-
-
Notifications
You must be signed in to change notification settings - Fork 497
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
14 changed files
with
324 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
passport-couchdb | ||
================ | ||
|
||
Example of passport authentication using Express 4.0, couchdb and resourceful.js | ||
|
||
Provides a basic example of Sing up, Log in and Log out. | ||
|
||
### Requirements | ||
|
||
Just install [couchdb](http://couchdb.apache.org/) and create a db called 'passport-test'. | ||
|
||
### Install | ||
|
||
npm install | ||
|
||
### Run | ||
|
||
npm start | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,109 @@ | ||
var express = require('express'), | ||
path = require('path'), | ||
favicon = require('static-favicon'), | ||
logger = require('morgan'), | ||
cookieParser = require('cookie-parser'), | ||
bodyParser = require('body-parser'), | ||
session = require('express-session'), | ||
engine = require('ejs-locals'); | ||
|
||
var routes = require('./routes/index'); | ||
|
||
// passport stuff | ||
var passport = require('passport'), | ||
flash = require('connect-flash'), | ||
LocalStrategy = require('passport-local').Strategy; | ||
|
||
var env = process.env.NODE_ENV || 'development', | ||
config = require('./config/' + env + '.js'), | ||
resourceful = require('resourceful'); | ||
|
||
|
||
var User = require('./models/user'); | ||
|
||
|
||
passport.serializeUser(function(user, done) { | ||
done(null, user._id); | ||
}); | ||
|
||
passport.deserializeUser(function(id, done) { | ||
User.find({_id : id},function (err, user) { | ||
if (err || user.length == 0) | ||
done(err, null); | ||
else | ||
done(err, user[0]); | ||
}); | ||
}); | ||
|
||
|
||
passport.use(new LocalStrategy( | ||
function(username, password, done) { | ||
process.nextTick(function () { | ||
User.find( {username : username}, function(err, user) { | ||
if (err) { return done(err); } | ||
if (!user || user.length == 0) { return done(null, false, { message: 'Unknown user ' + username }); } | ||
user = user[0]; | ||
if (user.password != password) { return done(null, false, { message: 'Invalid password' }); } | ||
return done(null, user); | ||
}) | ||
}); | ||
} | ||
)); | ||
|
||
var app = express(); | ||
|
||
// view engine setup | ||
app.set('views', path.join(__dirname, 'views')); | ||
app.set('view engine', 'ejs'); | ||
app.engine('ejs', engine); | ||
|
||
app.use(favicon()); | ||
app.use(logger('dev')); | ||
app.use(bodyParser.json()); | ||
app.use(bodyParser.urlencoded()); | ||
app.use(cookieParser()); | ||
app.use(express.static(path.join(__dirname, 'public'))); | ||
|
||
// Passport stuff | ||
app.use(session({ secret: 'some bad text' })); // session secret | ||
app.use(passport.initialize()); | ||
app.use(passport.session()); // persistent login sessions | ||
app.use(flash()); // use connect-flash for flash messages stored in session | ||
require('./routes/index.js')(app, passport); | ||
|
||
|
||
/// catch 404 and forwarding to error handler | ||
app.use(function(req, res, next) { | ||
var err = new Error('Not Found'); | ||
err.status = 404; | ||
next(err); | ||
}); | ||
|
||
/// error handlers | ||
|
||
// development error handler | ||
// will print stacktrace | ||
if (app.get('env') === 'development') { | ||
app.use(function(err, req, res, next) { | ||
res.status(err.status || 500); | ||
res.render('error', { | ||
message: err.message, | ||
error: err | ||
}); | ||
}); | ||
} | ||
|
||
// production error handler | ||
// no stacktraces leaked to user | ||
app.use(function(err, req, res, next) { | ||
res.status(err.status || 500); | ||
res.render('error', { | ||
message: err.message, | ||
error: {} | ||
}); | ||
}); | ||
|
||
resourceful.use('couchdb', {database: config.database}); | ||
|
||
|
||
module.exports = app; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
#!/usr/bin/env node | ||
var debug = require('debug')('my-application'); | ||
var app = require('../app'); | ||
|
||
app.set('port', process.env.PORT || 3000); | ||
|
||
var server = app.listen(app.get('port'), function() { | ||
debug('Express server listening on port ' + server.address().port); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
module.exports = { | ||
host: 'localhost', | ||
port: '5984', | ||
database: 'passport-test', | ||
username: '', | ||
password: '' | ||
}; | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
|
||
var resourceful = require('resourceful'); | ||
|
||
var User = module.exports = resourceful.define('user', function () { | ||
|
||
this.string('name'); | ||
this.string('password'); | ||
|
||
this.timestamps(); | ||
|
||
}); | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
{ | ||
"name": "application-name", | ||
"version": "0.0.1", | ||
"private": true, | ||
"scripts": { | ||
"start": "node ./bin/www" | ||
}, | ||
"dependencies": { | ||
"body-parser": "~1.0.0", | ||
"connect-flash": "^0.1.1", | ||
"cookie-parser": "~1.0.1", | ||
"debug": "~0.7.4", | ||
"ejs": "~0.8.5", | ||
"ejs-locals": "^1.0.2", | ||
"express": "~4.0.0", | ||
"express-session": "^1.6.1", | ||
"morgan": "~1.0.0", | ||
"passport": "^0.2.0", | ||
"passport-local": "^1.0.0", | ||
"resourceful": "^0.2.3", | ||
"static-favicon": "~1.0.0" | ||
} | ||
} |
8 changes: 8 additions & 0 deletions
8
examples/express4-couchdb-resourceful/public/stylesheets/style.css
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
body { | ||
padding: 50px; | ||
font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; | ||
} | ||
|
||
a { | ||
color: #00B7FF; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
var User = require('../models/user'); | ||
|
||
module.exports = function(app, passport) { | ||
|
||
|
||
app.get('/', function(req, res) { | ||
res.render('index.ejs', {user : req.user}); | ||
}); | ||
|
||
app.get('/account', function(req, res) { | ||
res.render('account.ejs', {user : req.user}); | ||
}); | ||
|
||
app.get('/logout', function(req, res) { | ||
req.logout(); | ||
res.redirect('/'); | ||
}); | ||
|
||
app.get('/login', function(req, res) { | ||
res.render('login.ejs', { message: req.flash('loginMessage') }); | ||
}); | ||
|
||
app.post('/login', passport.authenticate('local', { | ||
successRedirect : '/', | ||
failureRedirect : '/login', // redirect back to the signup page if there is an error | ||
failureFlash : true // allow flash messages | ||
})); | ||
|
||
app.get('/signup', function(req, res) { | ||
res.render('signup.ejs', { message: req.flash('signupMessage') }); | ||
}); | ||
|
||
// process the signup form | ||
app.post('/signup', function(req, res) { | ||
User.create(req.body.user, function(err, data) { | ||
if (err) { | ||
console.log('Error : ', err); | ||
res.send(500, err); | ||
} else { | ||
res.redirect('/'); | ||
} | ||
}); | ||
}); | ||
|
||
|
||
}; | ||
|
||
// route middleware to ensure user is logged in | ||
function isLoggedIn(req, res, next) { | ||
if (req.isAuthenticated()) | ||
return next(); | ||
|
||
res.redirect('/'); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
<% layout('layout') -%> | ||
|
||
<% if (typeof user == 'object' && user) { %> | ||
<div> | ||
<label>Username:</label> | ||
<label> <%= user.username %> </label><br/> | ||
</div> | ||
<div> | ||
<label>Password:</label> | ||
<label> <%= user.password%> </label> <br/> | ||
</div> | ||
<% } else { %> | ||
<p> Please log in. | ||
<% } %> | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
<h1><%= message %></h1> | ||
<h2><%= error.status %></h2> | ||
<pre><%= error.stack %></pre> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
<% layout('layout') -%> | ||
|
||
<% if (!user) { %> | ||
<h2>Welcome! Please log in.</h2> | ||
<% } else { %> | ||
<h2>Hello, <%= user.username %>.</h2> | ||
<% } %> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
<!DOCTYPE html> | ||
<html> | ||
<head> | ||
<title>Passport-Local Example</title> | ||
</head> | ||
<body> | ||
<% if (typeof user == 'object' && user) { %> | ||
<p> | ||
<a href="/">Home</a> | | ||
<a href="/account">Account</a> | | ||
<a href="/logout">Log Out</a> | ||
</p> | ||
<% } else { %> | ||
<p> | ||
<a href="/">Home</a> | | ||
<a href="/login">Log In</a> | | ||
<a href="/signup"> Sign Up </a> | ||
</p> | ||
<% } %> | ||
|
||
<% if (typeof message == 'object' && message) { %> | ||
<p><%= message %></p> | ||
<% } %> | ||
|
||
<%- body %> | ||
</body> | ||
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
<% layout('layout') -%> | ||
|
||
<form action="/login" method="post"> | ||
<div> | ||
<label>Username:</label> | ||
<input type="text" name="username"/><br/> | ||
</div> | ||
<div> | ||
<label>Password:</label> | ||
<input type="password" name="password"/> | ||
</div> | ||
<div> | ||
<input type="submit" value="Submit"/> | ||
</div> | ||
</form> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
<% layout('layout') -%> | ||
|
||
<form action="/signup" method="post"> | ||
<div> | ||
<label>Username:</label> | ||
<input type="text" name="user[username]"/><br/> | ||
</div> | ||
<div> | ||
<label>Password:</label> | ||
<input type="password" name="user[password]"/> | ||
</div> | ||
<div> | ||
<input type="submit" value="Submit"/> | ||
</div> | ||
</form> |