Skip to content

Commit bc13a62

Browse files
committed
first commit
0 parents  commit bc13a62

File tree

3,337 files changed

+487176
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

3,337 files changed

+487176
-0
lines changed

README.md

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# node-express-mongoose-passport-rest-auth
2+
3+
Before run this example, make sure you have installed and running MongoDB.
4+
5+
Step to run locally:
6+
7+
* Clone this repo
8+
* Run 'npm install'
9+
* Run 'npm start'
10+
# node-express-mongoose-passport-jwt-rest-api-auth

app.js

+62
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
var express = require('express');
2+
var path = require('path');
3+
var favicon = require('serve-favicon');
4+
var logger = require('morgan');
5+
var cookieParser = require('cookie-parser');
6+
var bodyParser = require('body-parser');
7+
var morgan = require('morgan');
8+
var mongoose = require('mongoose');
9+
var passport = require('passport');
10+
var config = require('./config/database');
11+
12+
mongoose.connect(config.database);
13+
14+
var api = require('./routes/api');
15+
16+
var app = express();
17+
18+
// view engine setup
19+
app.set('views', path.join(__dirname, 'views'));
20+
app.set('view engine', 'jade');
21+
22+
app.use(function(req, res, next) {
23+
res.header("Access-Control-Allow-Origin", "*");
24+
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
25+
next();
26+
});
27+
28+
// uncomment after placing your favicon in /public
29+
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
30+
app.use(logger('dev'));
31+
app.use(bodyParser.json());
32+
app.use(bodyParser.urlencoded({ extended: false }));
33+
app.use(cookieParser());
34+
app.use(express.static(path.join(__dirname, 'public')));
35+
app.use(morgan('dev'));
36+
app.use(passport.initialize());
37+
38+
app.get('/', function(req, res) {
39+
res.send('Page under construction.');
40+
});
41+
42+
app.use('/api', api);
43+
44+
// catch 404 and forward to error handler
45+
app.use(function(req, res, next) {
46+
var err = new Error('Not Found');
47+
err.status = 404;
48+
next(err);
49+
});
50+
51+
// error handler
52+
app.use(function(err, req, res, next) {
53+
// set locals, only providing error in development
54+
res.locals.message = err.message;
55+
res.locals.error = req.app.get('env') === 'development' ? err : {};
56+
57+
// render the error page
58+
res.status(err.status || 500);
59+
res.render('error');
60+
});
61+
62+
module.exports = app;

bin/www

+90
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
#!/usr/bin/env node
2+
3+
/**
4+
* Module dependencies.
5+
*/
6+
7+
var app = require('../app');
8+
var debug = require('debug')('node-rest-auth:server');
9+
var http = require('http');
10+
11+
/**
12+
* Get port from environment and store in Express.
13+
*/
14+
15+
var port = normalizePort(process.env.PORT || '3000');
16+
app.set('port', port);
17+
18+
/**
19+
* Create HTTP server.
20+
*/
21+
22+
var server = http.createServer(app);
23+
24+
/**
25+
* Listen on provided port, on all network interfaces.
26+
*/
27+
28+
server.listen(port);
29+
server.on('error', onError);
30+
server.on('listening', onListening);
31+
32+
/**
33+
* Normalize a port into a number, string, or false.
34+
*/
35+
36+
function normalizePort(val) {
37+
var port = parseInt(val, 10);
38+
39+
if (isNaN(port)) {
40+
// named pipe
41+
return val;
42+
}
43+
44+
if (port >= 0) {
45+
// port number
46+
return port;
47+
}
48+
49+
return false;
50+
}
51+
52+
/**
53+
* Event listener for HTTP server "error" event.
54+
*/
55+
56+
function onError(error) {
57+
if (error.syscall !== 'listen') {
58+
throw error;
59+
}
60+
61+
var bind = typeof port === 'string'
62+
? 'Pipe ' + port
63+
: 'Port ' + port;
64+
65+
// handle specific listen errors with friendly messages
66+
switch (error.code) {
67+
case 'EACCES':
68+
console.error(bind + ' requires elevated privileges');
69+
process.exit(1);
70+
break;
71+
case 'EADDRINUSE':
72+
console.error(bind + ' is already in use');
73+
process.exit(1);
74+
break;
75+
default:
76+
throw error;
77+
}
78+
}
79+
80+
/**
81+
* Event listener for HTTP server "listening" event.
82+
*/
83+
84+
function onListening() {
85+
var addr = server.address();
86+
var bind = typeof addr === 'string'
87+
? 'pipe ' + addr
88+
: 'port ' + addr.port;
89+
debug('Listening on ' + bind);
90+
}

config/database.js

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
module.exports = {
2+
'secret':'nodeauthsecret',
3+
'database': 'mongodb://localhost/node-auth'
4+
};

config/passport.js

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
var JwtStrategy = require('passport-jwt').Strategy,
2+
ExtractJwt = require('passport-jwt').ExtractJwt;
3+
4+
// load up the user model
5+
var User = require('../models/user');
6+
var config = require('../config/database'); // get db config file
7+
8+
module.exports = function(passport) {
9+
var opts = {};
10+
opts.jwtFromRequest = ExtractJwt.fromAuthHeader();
11+
opts.secretOrKey = config.secret;
12+
passport.use(new JwtStrategy(opts, function(jwt_payload, done) {
13+
User.findOne({id: jwt_payload.id}, function(err, user) {
14+
if (err) {
15+
return done(err, false);
16+
}
17+
if (user) {
18+
done(null, user);
19+
} else {
20+
done(null, false);
21+
}
22+
});
23+
}));
24+
};

models/book.js

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
var mongoose = require('mongoose');
2+
var Schema = mongoose.Schema;
3+
4+
var BookSchema = new Schema({
5+
isbn: {
6+
type: String,
7+
required: true
8+
},
9+
title: {
10+
type: String,
11+
required: true
12+
},
13+
author: {
14+
type: String,
15+
required: true
16+
},
17+
publisher: {
18+
type: String,
19+
required: true
20+
}
21+
});
22+
23+
module.exports = mongoose.model('Book', BookSchema);

models/user.js

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
var mongoose = require('mongoose');
2+
var Schema = mongoose.Schema;
3+
var bcrypt = require('bcrypt-nodejs');
4+
5+
var UserSchema = new Schema({
6+
username: {
7+
type: String,
8+
unique: true,
9+
required: true
10+
},
11+
password: {
12+
type: String,
13+
required: true
14+
}
15+
});
16+
17+
UserSchema.pre('save', function (next) {
18+
var user = this;
19+
if (this.isModified('password') || this.isNew) {
20+
bcrypt.genSalt(10, function (err, salt) {
21+
if (err) {
22+
return next(err);
23+
}
24+
bcrypt.hash(user.password, salt, null, function (err, hash) {
25+
if (err) {
26+
return next(err);
27+
}
28+
user.password = hash;
29+
next();
30+
});
31+
});
32+
} else {
33+
return next();
34+
}
35+
});
36+
37+
UserSchema.methods.comparePassword = function (passw, cb) {
38+
bcrypt.compare(passw, this.password, function (err, isMatch) {
39+
if (err) {
40+
return cb(err);
41+
}
42+
cb(null, isMatch);
43+
});
44+
};
45+
46+
module.exports = mongoose.model('User', UserSchema);

node_modules/.bin/acorn

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

node_modules/.bin/cleancss

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

node_modules/.bin/jade

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

node_modules/.bin/mime

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

node_modules/.bin/mkdirp

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

node_modules/.bin/semver

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

node_modules/.bin/uglifyjs

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)