Advertisement
Guest User

Untitled

a guest
Nov 10th, 2016
176
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ==============================
  2. // START DEPENDENCIES
  3. // ==============================
  4. var express = require("express"),
  5. expressSession = require("express-session"),
  6. bodyParser = require("body-parser"),
  7. cookieParser = require("cookie-parser"),
  8. mongoose = require("mongoose"),
  9. passport = require("passport"),
  10. LocalStrategy = require("passport-local"),
  11. bcrypt = require('bcrypt-nodejs'),
  12. morgan = require("morgan"),
  13. flash = require("connect-flash"),
  14. app = express();
  15.  
  16. // ==============================
  17. // END DEPENDENCIES
  18. // ==============================
  19.  
  20. // ==============================
  21. // START CONFIG
  22. // ==============================
  23. app.set("view engine", "ejs");
  24. app.use(express.static("public"));
  25. app.use(morgan("dev"));
  26. app.use(flash());
  27. app.use(bodyParser.urlencoded({extended: true}));
  28. app.use(cookieParser());
  29. app.use(expressSession({
  30.     secret: "2a69sj4hJos",
  31.     resave: false,
  32.     saveUninitialized: false
  33. }));
  34. app.use(passport.initialize());
  35. app.use(passport.session());
  36.  
  37. // ==============================
  38. // END CONFIG
  39. // ==============================
  40.  
  41. // ==============================
  42. // START MONGOOSE
  43. // ==============================
  44.  
  45. mongoose.Promise = global.Promise;
  46.  
  47. mongoose.connect("mongodb://root:codingscript27@ds145677.mlab.com:45677/authtesting");
  48.  
  49. var userSchema = new mongoose.Schema({
  50.     username: String,
  51.     password: String
  52. });
  53.  
  54. userSchema.methods.generateHash = function(password) {
  55.     return bcrypt.hashSync(password, bcrypt.genSaltSync(8), null);
  56. }
  57.  
  58. userSchema.methods.validPassword = function(password) {
  59.     return bcrypt.compareSync(password, this.password);
  60. }
  61.  
  62. var User = mongoose.model("User", userSchema);
  63.  
  64. // ==============================
  65. // END MONGOOSE
  66. // ==============================
  67.  
  68. // ==============================
  69. // START PASSPORT
  70. // ==============================
  71.  
  72. passport.serializeUser(function(user, done) {
  73.     done(null, user.id);
  74. });
  75.  
  76. passport.deserializeUser(function(id, done) {
  77.     User.findById(id, function(err, user) {
  78.         done(err, user);
  79.     });
  80. });
  81.  
  82. passport.use("local-signup", new LocalStrategy({passReqToCallback: true}, function(req, username, password, done) {
  83.     User.findOne({username: username}, function(err, user) {
  84.         if(err) return done(err);
  85.        
  86.         if(user) {
  87.             return done(null, false, req.flash("registerMessage", "That username already exists!"));
  88.         } else {
  89.             var newUser = new User();
  90.            
  91.             newUser.username = username;
  92.             newUser.password = newUser.generateHash(password);
  93.            
  94.             newUser.save(function(err) {
  95.                 if(err) throw err;
  96.                 return done(null, newUser);
  97.             });
  98.         }
  99.     });
  100. }));
  101.  
  102. passport.use("local-login", new LocalStrategy({passReqToCallback: true}, function(req, username, password, done) {
  103.     User.findOne({username: username}, function(err, user) {
  104.         if(err) return done(err);
  105.         if(!user) return done(null, false, req.flash("loginMessage", "There are no users with that username!"));
  106.         if(!user.validPassword(password)) return done(null, false, req.flash("loginMessage", "Incorrect password!"));
  107.        
  108.         return done(null, user);
  109.     });
  110. }));
  111.  
  112. function isLoggedIn(req, res, next) {
  113.     if(req.isAuthenticated()) {
  114.         next();
  115.     } else {
  116.         res.redirect("/");
  117.     }
  118. }
  119.  
  120. // ==============================
  121. // END PASSPORT
  122. // ==============================
  123.  
  124. // ==============================
  125. // START ROUTES
  126. // ==============================
  127.  
  128. app.get("/", function(req, res) {
  129.     res.render("home");
  130. });
  131.  
  132. app.get("/register", function(req, res) {
  133.     res.render("register", {message: req.flash("registerMessage")});
  134. });
  135.  
  136. app.post("/register", passport.authenticate("local-signup", {
  137.     successRedirect: "/profile",
  138.     failureRedirect: "/register",
  139.     failureFlash: true
  140. }));
  141.  
  142. app.get("/login", function(req, res) {
  143.     res.render("login", {message: req.flash("loginMessage")});
  144. });
  145.  
  146. app.post("/login", passport.authenticate("local-login", {
  147.     successRedirect: "/profile",
  148.     failureRedirect: "/login",
  149.     failureFlash: true
  150. }));
  151.  
  152. app.get("/profile", isLoggedIn, function(req, res) {
  153.    res.render("profile", {user: req.user});
  154. });
  155.  
  156. app.get("/logout", function(req, res) {
  157.     req.logout();
  158.     res.redirect("/login");
  159. });
  160.  
  161. app.get("*", function(req, res) {
  162.     res.send("Page Not Found (404 Error)");
  163. });
  164.  
  165. // ==============================
  166. // END ROUTES
  167. // ==============================
  168.  
  169. app.listen(process.env.PORT, process.env.IP, function() {
  170.     console.log("Server running...");
  171. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement