Advertisement
Guest User

Untitled

a guest
Sep 13th, 2016
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.88 KB | None | 0 0
  1. my-app
  2. -.c9
  3. -.git
  4. -bin
  5. -config
  6. -database.js
  7. -passport.js
  8. -models
  9. -user.js
  10. -node_modules
  11. -public
  12. -routes
  13. -index.js
  14. -uploads
  15. -views
  16. -error.ejs
  17. -index.ejs
  18. -profile.ejs
  19. -signup.ejs
  20. -app.js
  21. -bower.json
  22. -package.json
  23.  
  24. var express = require('express');
  25. var path = require('path');
  26. var favicon = require('serve-favicon');
  27. var logger = require('morgan');
  28. var cookieParser = require('cookie-parser');
  29. var bodyParser = require('body-parser');
  30. var multer = require('multer');
  31. var fs = require('fs');
  32. var multer = require('multer');
  33.  
  34. var routes = require('./routes/index');
  35. var users = require('./routes/users');
  36.  
  37. var passport = require('passport');
  38. var LocalStrategy = require('passport-local').Strategy;
  39. var mongoose = require('mongoose');
  40. var flash = require('connect-flash');
  41. var session = require('express-session');
  42.  
  43. var configDB = require('./config/database.js');
  44. mongoose.connect(configDB.url);
  45.  
  46. var app = express();
  47.  
  48. // view engine setup
  49. app.set('views', path.join(__dirname, 'views'));
  50. app.set('view engine', 'ejs');
  51.  
  52. // uncomment after placing your favicon in /public
  53. //app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
  54. app.use(logger('dev'));
  55. app.use(bodyParser.json());
  56. app.use(bodyParser.urlencoded({ extended: false }));
  57. app.use(cookieParser());
  58. app.use(express.static(path.join(__dirname, 'public')));
  59.  
  60. app.use(session({ secret: 'shhsecret' }));
  61. app.use(passport.initialize());
  62. app.use(passport.session());
  63. app.use(flash());
  64.  
  65. app.use(multer({ dest: './uploads/',
  66. rename: function (fieldname, filename) {
  67. return filename;
  68. },
  69. }));
  70.  
  71. app.use('/', routes);
  72. app.use('/users', users);
  73.  
  74. require('./config/passport')(passport);
  75.  
  76. // catch 404 and forward to error handler
  77. app.use(function(req, res, next) {
  78. var err = new Error('Not Found');
  79. err.status = 404;
  80. next(err);
  81. });
  82.  
  83. // error handlers
  84. /*REMOVE ALL OTHER ERROR HANDLERS FROM THIS EXAMPLE TO SAVE SPACE BUT ACTUALLY STILL EXIST IN STANDARD APP.JS FILE CREATED WITH EXPRESS GENERATOR*/
  85.  
  86. module.exports = app;
  87.  
  88. var express = require('express');
  89. var passport = require('passport');
  90. var router = express.Router();
  91.  
  92. /* GET home page. */
  93. router.get('/', function(req, res, next) {
  94. res.render('index', { title: 'Express' });
  95. })
  96. .post('/', passport.authenticate('local-login', {
  97. successRedirect: '/profile',
  98. failureRedirect: '/',
  99. failureFlash: true,
  100. }));
  101.  
  102. router.get('/signup', function(req, res) {
  103. res.render('signup.ejs', { message: req.flash('loginMessage') });
  104. })
  105. .post('/signup', passport.authenticate('local-signup', {
  106. successRedirect: '/profile',
  107. failureRedirect: '/signup',
  108. failureFlash: true,
  109. }));
  110.  
  111. router.get('/profile', isLoggedIn, function(req, res) {
  112. res.render('profile.ejs', { user: req.user });
  113. });
  114.  
  115. router.get('/logout', function(req, res) {
  116. req.logout();
  117. res.redirect('/');
  118. });
  119.  
  120. module.exports = router;
  121.  
  122. function isLoggedIn(req, res, next) {
  123. if (req.isAuthenticated())
  124. return next();
  125. res.redirect('/');
  126. }
  127.  
  128. <form action="/signup" method="post">
  129. <div class="form-group col-xs-12 col-sm-4">
  130. <label for="firstName">First Name</label>
  131. <input type="text" class="form-control" name="firstName">
  132. </div>
  133. <div class="form-group col-xs-12 col-sm-4">
  134. <label class='iemphour-block' for="mInitial">Middle Initial</label>
  135. <input type="text" class="form-control iemphour-inline" name="mInitial">
  136. <span class="label label-info">Optional</span>
  137. </div>
  138. <div class="form-group col-xs-12 col-sm-4">
  139. <label for="lastName">Last Name</label>
  140. <input type="text" class="form-control" name="lastName">
  141. </div>
  142. <div class="form-group col-xs-12 col-sm-6">
  143. <label for="InputEmail">Email address</label>
  144. <input type="text" class="form-control" name="email">
  145. </div>
  146. <div class="form-group col-xs-12 col-sm-6">
  147. <label class='iemphour-block' for="InputTel">Phone Number</label>
  148. <input type="text" class="form-control iemphour-inline" name="phoneNumber">
  149. <span class="label label-info">Optional</span>
  150. </div>
  151. <div class="form-group col-xs-12 col-sm-6">
  152. <label for="exampleInputPassword1">Password</label>
  153. <input type="password" class="form-control" name="password" />
  154. </div>
  155. <div class="form-group col-xs-12 col-sm-6">
  156. <label for="exampleInputPassword2"> Confirm Password</label>
  157. <input type="password" class="form-control" name="cpassword" />
  158. </div>
  159. <div class="form-group col-xs-12">
  160. <div class="input-group">
  161. <label class="btn btn-default btn-file .raised input-group-addon">Upload ID <input type="file" style="display: none;"></label>
  162. <input type="text" class="form-control" placeholder="" name='stateIdImage'>
  163. </div><!-- /input-group -->
  164. <span class="label label-default">Please upload driver's license or state ID</span>
  165. </div><!--End of col-xs-12-->
  166. <div class='form-group col-xs-12'>
  167. <button type="submit" class="btn btn-submit raised">Submit</button>
  168. </div><!--End of form-group-->
  169. <div class="form-group col-xs-12">
  170. <p class="fa fa-sign-in"> Already have an account?<a href="/login"> Login</a></p>
  171. <p>Or go <a href="/">home</a>.</p>
  172. </div>
  173. </form>
  174.  
  175. var LocalStrategy = require('passport-local').Strategy;
  176. var User = require('../models/user');
  177. var fs = require('fs');
  178.  
  179. module.exports = function(passport) {
  180. passport.serializeUser(function(user, done) {
  181. done(null, user.id);
  182. });
  183. passport.deserializeUser(function(id, done) {
  184. User.findById(id, function(err, user) {
  185. done(err, user);
  186. });
  187. });
  188.  
  189. passport.use('local-signup', new LocalStrategy({
  190. usernameField: 'email',
  191. passwordField: 'password',
  192. passReqToCallback: true,
  193. },
  194. function(req, email, password, done) {
  195. process.nextTick(function() {
  196. User.findOne({ 'local.email': email }, function(err, user) {
  197. if (err)
  198. return done(err);
  199. if (user) {
  200. return done(null, false, req.flash('signupMessage', 'That email is already in use.'));
  201. } else {
  202. var newUser = new User();
  203. newUser.local.email = email;
  204. newUser.local.firstName = req.body.firstName;
  205. newUser.local.mInitial = req.body.mInitial;
  206. newUser.local.lastName = req.body.lastName;
  207. newUser.local.phoneNumber = req.body.phoneNumber;
  208. newUser.local.cpassword = req.body.cpassword;
  209. newUser.local.password = newUser.generateHash(password);
  210. newUser.stateIdImage.data = fs.readFileSync(req.files.stateIdImage.path)
  211. newUser.stateIdImage.contentType = 'image/jpg';
  212. newUser.save(function(err) {
  213. if (err)
  214. throw err;
  215. return done(null, newUser);
  216. });
  217. }
  218. });
  219. });
  220. }));
  221.  
  222. passport.use('local-login', new LocalStrategy({
  223. usernameField: 'email',
  224. passwordField: 'password',
  225. passReqToCallback: true,
  226. },
  227. function(req, email, password, done) {
  228. User.findOne({ 'local.email': email }, function(err, user) {
  229. if (err)
  230. return done(err);
  231. if (!user)
  232. return done(null, false, req.flash('loginMessage', 'No user found.'));
  233. if (!user.validPassword(password))
  234. return done(null, false, req.flash('loginMessage', 'Wrong password.'));
  235. return done(null, user);
  236. });
  237. }));
  238. };
  239.  
  240. var mongoose = require('mongoose');
  241. var bcrypt = require('bcrypt-nodejs');
  242.  
  243. var userSchema = mongoose.Schema({
  244. local:{
  245. email: String,
  246. password: String,
  247. firstName: String,
  248. mInitial: String,
  249. lastName: String,
  250. phoneNumber: String,
  251. cpassword: String,
  252. stateIdImage:{ data: Buffer, contentType: String}
  253. },
  254. });
  255.  
  256. userSchema.methods.generateHash = function(password) {
  257. return bcrypt.hashSync(password, bcrypt.genSaltSync(8), null);
  258. };
  259. userSchema.methods.validPassword = function(password) {
  260. return bcrypt.compareSync(password, this.local.password);
  261. };
  262. module.exports = mongoose.model('User', userSchema);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement