|
const express = require("express"); |
|
const flash = require("connect-flash"); |
|
|
|
const bcrypt = require("bcryptjs"); |
|
const passport = require("passport"); |
|
const LocalStrategy = require("passport-local").Strategy; |
|
const User = require("../models").User; |
|
|
|
const router = express.Router(); |
|
|
|
passport.serializeUser((user, done) => done(null, user.id)); |
|
|
|
// used to deserialize the user |
|
passport.deserializeUser((id, done) => { |
|
User.findById(id, (err, user) => done(err, user)); |
|
}); |
|
|
|
router.get("/signup", (req, res) => { |
|
res.render("signup", { message: req.flash("signupMessage") }); |
|
}); |
|
|
|
// Step 1: Sign up |
|
const localSignUpName = "local-signup"; |
|
passport.use( |
|
localSignUpName, |
|
new LocalStrategy( |
|
{ |
|
usernameField: "email", |
|
passwordField: "password" |
|
}, |
|
(email, rawPassword, done) => |
|
User.find({ where: { email } }) |
|
.then(user => { |
|
if (user) { |
|
console.log("user already exists"); |
|
return done(null, false); |
|
} |
|
|
|
const saltRounds = 12; |
|
const salt = bcrypt.genSaltSync(saltRounds); |
|
const password = bcrypt.hashSync(rawPassword, salt); |
|
|
|
return User.create({ email, password }) |
|
.then(user => done(null, user)) |
|
.catch(done); |
|
}) |
|
.catch(done) |
|
) |
|
); |
|
router.post( |
|
"/signup", |
|
passport.authenticate(localSignUpName, { |
|
successRedirect: "/profile", |
|
failureRedirect: "/signup" |
|
}) |
|
); |
|
|
|
router.get("/login", (req, res) => { |
|
res.render("login", { message: req.flash("loginMessage") }); |
|
}); |
|
|
|
const init = app => { |
|
app.use(passport.initialize()); |
|
app.use(passport.session()); |
|
app.use(flash()); |
|
app.use("/", router); |
|
}; |
|
|
|
module.exports = { init }; |