Passport local auth and front end for registration, functioning but needs work

This commit is contained in:
Mike Rode
2019-09-05 00:39:05 -05:00
parent 7730e9554f
commit d0fd8ad27f
9 changed files with 267 additions and 78 deletions
+22 -17
View File
@@ -13,29 +13,34 @@ router.get(
},
);
router.post(
'/login',
function(req, res, next) {
console.log('Request params', req.params);
console.log('Request body', req.body);
console.log('Request query', req.query);
next();
},
passport.authenticate('local', {
failureRedirect: '/sign-up',
failureFlash: true,
}),
function(req, res) {
console.log('res', res.body);
res.redirect('/');
},
);
router.post('/sign-up', function(req, res, next) {
passport.authenticate('local-signup', function(err, user, info) {
if (err) {
console.log('sign up error', err);
return next(err);
}
if (!user) {
console.log('no user returned', info);
return res.json({message: info.message});
}
console.log('user found', user);
res.json(user);
})(req, res, next);
});
router.post('/login', passport.authenticate('local-login'), function(req, res) {
// If this function gets called, authentication was successful.
// `req.user` contains the authenticated user.
console.log('User in session', req.user);
res.redirect('/');
});
router.get('/google/callback', passport.authenticate('google'), (req, res) => {
res.redirect('/plex-pin');
});
router.get('/current_user', (req, res) => {
console.log('current user', req.user);
res.send(req.user);
});
@@ -0,0 +1,11 @@
module.exports = {
up: function(queryInterface, Sequelize) {
// logic for transforming into the new state
return queryInterface.addColumn('Users', 'password', Sequelize.STRING);
},
down: function(queryInterface, Sequelize) {
// logic for reverting the changes
return queryInterface.removeColumn('Users', 'password');
},
};
+1
View File
@@ -14,6 +14,7 @@ module.exports = (sequelize, DataTypes) => {
sonarrUrl: DataTypes.STRING,
sonarrApiKey: DataTypes.STRING,
admin: DataTypes.BOOLEAN,
password: DataTypes.STRING,
},
{},
);
+3 -3
View File
@@ -85,9 +85,9 @@ export default () => {
});
};
process.on('uncaughtException', error => {
console.log('Unhandled Exception due to:', error);
process.exit(1);
process.on('SIGINT', function() {
console.log('SIGINT');
process.exit();
});
process.on('unhandledRejection', (reason, p) => {
+95 -48
View File
@@ -7,62 +7,114 @@ import keys from '../../../config';
import models from '../../db/models';
passport.serializeUser((user, done) => {
console.log('serial', user);
done(null, user.id);
});
passport.deserializeUser((id, done) => {
console.log('deserial', id);
models.User.findByPk(id).then(user => {
done(null, user);
});
});
// passport.use(
// new LocalStrategy(
// {usernameField: 'email', passwordField: 'password'},
// async (email, password, done) => {
// try {
// console.log('Made it to passport', email);
// const existingUser = await User.findOne({email: email});
// if (existingUser) {
// done(null, existingUser);
// }
// if (!user) {
// done(null, false, {message: 'Incorrect username.'});
// }
// if (!user.validPassword(password)) {
// done(null, false, {message: 'Incorrect password.'});
// }
// const hashedPassword = generateHash(password);
// const user = await models.User.create({
// email: email,
// password: hashedPassword,
// });
// done(null, user);
// } catch (error) {
// console.log('passport error', error);
// done(error);
// }
// },
// ),
// );
const generateHash = password => {
return bCrypt.hashSync(password, bCrypt.genSaltSync(8), null);
};
passport.use(
'local-signup',
new LocalStrategy(
{usernameField: 'email', passwordField: 'password'},
function(username, password, done) {
User.findOne({email: email}, function(err, user) {
if (err) {
return done(err);
}
if (!user) {
return done(null, false, {message: 'Incorrect email.'});
}
if (!user.validPassword(password)) {
return done(null, false, {message: 'Incorrect password.'});
}
return done(null, user);
{
usernameField: 'email',
passwordField: 'password',
},
async function(email, password, done) {
console.log('passport - signup', email);
const exisitingUser = await models.User.findOne({
where: {email: email},
returning: true,
plain: true,
raw: true,
});
if (exisitingUser) {
return done(null, false, {
message: 'That email is already taken',
});
}
const userPassword = generateHash(password);
const data = {
email: email,
password: userPassword,
};
console.log('user data before save', data);
const newUser = models.User.create(data, {
returning: true,
plain: true,
raw: true,
}).then(function(newUser, created) {
if (!newUser) {
return done(null, false);
}
if (newUser) {
console.log('new user created', newUser);
return done(null, newUser);
}
});
},
),
);
//LOCAL SIGNIN
passport.use(
'local-login',
new LocalStrategy(
{
usernameField: 'email',
passwordField: 'password',
},
function(email, password, done) {
var isValidPassword = function(userpass, password) {
return bCrypt.compareSync(password, userpass);
};
models.User.findOne({
where: {
email: email,
},
returning: true,
plain: true,
raw: true,
})
.then(function(user) {
if (!user) {
return done(null, false, {
message: 'Email does not exist',
});
}
if (!isValidPassword(user.password, password)) {
return done(null, false, {
message: 'Incorrect password.',
});
}
console.log('user sent to serialize', user.id);
return done(null, user);
})
.catch(function(err) {
console.log('Error:', err);
return done(null, false, {
message: 'Something went wrong with your Signin',
});
});
},
),
);
@@ -96,8 +148,3 @@ passport.use(
},
),
);
// should export to commonUtils file
const generateHash = string => {
return bCrypt.hashSync(string, bCrypt.genSaltSync(8), null);
};