Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- my-app
- -.c9
- -.git
- -bin
- -config
- -database.js
- -passport.js
- -models
- -user.js
- -node_modules
- -public
- -routes
- -index.js
- -uploads
- -views
- -error.ejs
- -index.ejs
- -profile.ejs
- -signup.ejs
- -app.js
- -bower.json
- -package.json
- var express = require('express');
- var path = require('path');
- var favicon = require('serve-favicon');
- var logger = require('morgan');
- var cookieParser = require('cookie-parser');
- var bodyParser = require('body-parser');
- var multer = require('multer');
- var fs = require('fs');
- var multer = require('multer');
- var routes = require('./routes/index');
- var users = require('./routes/users');
- var passport = require('passport');
- var LocalStrategy = require('passport-local').Strategy;
- var mongoose = require('mongoose');
- var flash = require('connect-flash');
- var session = require('express-session');
- var configDB = require('./config/database.js');
- mongoose.connect(configDB.url);
- var app = express();
- // view engine setup
- app.set('views', path.join(__dirname, 'views'));
- app.set('view engine', 'ejs');
- // uncomment after placing your favicon in /public
- //app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
- app.use(logger('dev'));
- app.use(bodyParser.json());
- app.use(bodyParser.urlencoded({ extended: false }));
- app.use(cookieParser());
- app.use(express.static(path.join(__dirname, 'public')));
- app.use(session({ secret: 'shhsecret' }));
- app.use(passport.initialize());
- app.use(passport.session());
- app.use(flash());
- app.use(multer({ dest: './uploads/',
- rename: function (fieldname, filename) {
- return filename;
- },
- }));
- app.use('/', routes);
- app.use('/users', users);
- require('./config/passport')(passport);
- // catch 404 and forward to error handler
- app.use(function(req, res, next) {
- var err = new Error('Not Found');
- err.status = 404;
- next(err);
- });
- // error handlers
- /*REMOVE ALL OTHER ERROR HANDLERS FROM THIS EXAMPLE TO SAVE SPACE BUT ACTUALLY STILL EXIST IN STANDARD APP.JS FILE CREATED WITH EXPRESS GENERATOR*/
- module.exports = app;
- var express = require('express');
- var passport = require('passport');
- var router = express.Router();
- /* GET home page. */
- router.get('/', function(req, res, next) {
- res.render('index', { title: 'Express' });
- })
- .post('/', passport.authenticate('local-login', {
- successRedirect: '/profile',
- failureRedirect: '/',
- failureFlash: true,
- }));
- router.get('/signup', function(req, res) {
- res.render('signup.ejs', { message: req.flash('loginMessage') });
- })
- .post('/signup', passport.authenticate('local-signup', {
- successRedirect: '/profile',
- failureRedirect: '/signup',
- failureFlash: true,
- }));
- router.get('/profile', isLoggedIn, function(req, res) {
- res.render('profile.ejs', { user: req.user });
- });
- router.get('/logout', function(req, res) {
- req.logout();
- res.redirect('/');
- });
- module.exports = router;
- function isLoggedIn(req, res, next) {
- if (req.isAuthenticated())
- return next();
- res.redirect('/');
- }
- <form action="/signup" method="post">
- <div class="form-group col-xs-12 col-sm-4">
- <label for="firstName">First Name</label>
- <input type="text" class="form-control" name="firstName">
- </div>
- <div class="form-group col-xs-12 col-sm-4">
- <label class='iemphour-block' for="mInitial">Middle Initial</label>
- <input type="text" class="form-control iemphour-inline" name="mInitial">
- <span class="label label-info">Optional</span>
- </div>
- <div class="form-group col-xs-12 col-sm-4">
- <label for="lastName">Last Name</label>
- <input type="text" class="form-control" name="lastName">
- </div>
- <div class="form-group col-xs-12 col-sm-6">
- <label for="InputEmail">Email address</label>
- <input type="text" class="form-control" name="email">
- </div>
- <div class="form-group col-xs-12 col-sm-6">
- <label class='iemphour-block' for="InputTel">Phone Number</label>
- <input type="text" class="form-control iemphour-inline" name="phoneNumber">
- <span class="label label-info">Optional</span>
- </div>
- <div class="form-group col-xs-12 col-sm-6">
- <label for="exampleInputPassword1">Password</label>
- <input type="password" class="form-control" name="password" />
- </div>
- <div class="form-group col-xs-12 col-sm-6">
- <label for="exampleInputPassword2"> Confirm Password</label>
- <input type="password" class="form-control" name="cpassword" />
- </div>
- <div class="form-group col-xs-12">
- <div class="input-group">
- <label class="btn btn-default btn-file .raised input-group-addon">Upload ID <input type="file" style="display: none;"></label>
- <input type="text" class="form-control" placeholder="" name='stateIdImage'>
- </div><!-- /input-group -->
- <span class="label label-default">Please upload driver's license or state ID</span>
- </div><!--End of col-xs-12-->
- <div class='form-group col-xs-12'>
- <button type="submit" class="btn btn-submit raised">Submit</button>
- </div><!--End of form-group-->
- <div class="form-group col-xs-12">
- <p class="fa fa-sign-in"> Already have an account?<a href="/login"> Login</a></p>
- <p>Or go <a href="/">home</a>.</p>
- </div>
- </form>
- var LocalStrategy = require('passport-local').Strategy;
- var User = require('../models/user');
- var fs = require('fs');
- module.exports = function(passport) {
- passport.serializeUser(function(user, done) {
- done(null, user.id);
- });
- passport.deserializeUser(function(id, done) {
- User.findById(id, function(err, user) {
- done(err, user);
- });
- });
- passport.use('local-signup', new LocalStrategy({
- usernameField: 'email',
- passwordField: 'password',
- passReqToCallback: true,
- },
- function(req, email, password, done) {
- process.nextTick(function() {
- User.findOne({ 'local.email': email }, function(err, user) {
- if (err)
- return done(err);
- if (user) {
- return done(null, false, req.flash('signupMessage', 'That email is already in use.'));
- } else {
- var newUser = new User();
- newUser.local.email = email;
- newUser.local.firstName = req.body.firstName;
- newUser.local.mInitial = req.body.mInitial;
- newUser.local.lastName = req.body.lastName;
- newUser.local.phoneNumber = req.body.phoneNumber;
- newUser.local.cpassword = req.body.cpassword;
- newUser.local.password = newUser.generateHash(password);
- newUser.stateIdImage.data = fs.readFileSync(req.files.stateIdImage.path)
- newUser.stateIdImage.contentType = 'image/jpg';
- newUser.save(function(err) {
- if (err)
- throw err;
- return done(null, newUser);
- });
- }
- });
- });
- }));
- passport.use('local-login', new LocalStrategy({
- usernameField: 'email',
- passwordField: 'password',
- passReqToCallback: true,
- },
- function(req, email, password, done) {
- User.findOne({ 'local.email': email }, function(err, user) {
- if (err)
- return done(err);
- if (!user)
- return done(null, false, req.flash('loginMessage', 'No user found.'));
- if (!user.validPassword(password))
- return done(null, false, req.flash('loginMessage', 'Wrong password.'));
- return done(null, user);
- });
- }));
- };
- var mongoose = require('mongoose');
- var bcrypt = require('bcrypt-nodejs');
- var userSchema = mongoose.Schema({
- local:{
- email: String,
- password: String,
- firstName: String,
- mInitial: String,
- lastName: String,
- phoneNumber: String,
- cpassword: String,
- stateIdImage:{ data: Buffer, contentType: String}
- },
- });
- userSchema.methods.generateHash = function(password) {
- return bcrypt.hashSync(password, bcrypt.genSaltSync(8), null);
- };
- userSchema.methods.validPassword = function(password) {
- return bcrypt.compareSync(password, this.local.password);
- };
- module.exports = mongoose.model('User', userSchema);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement