refactor passport
This commit is contained in:
parent
42ba4c82b6
commit
038cb8b6e1
|
@ -56,11 +56,11 @@ passport.use(new JsonStrategy({
|
|||
where: query,
|
||||
});
|
||||
if (!reguser) {
|
||||
done(null, false, { message: 'Name or Email does not exist!' });
|
||||
done(new Error('Name or Email does not exist!'));
|
||||
return;
|
||||
}
|
||||
if (!compareToHash(password, reguser.password)) {
|
||||
done(null, false, { message: 'Incorrect password!' });
|
||||
done(new Error('Incorrect password!'));
|
||||
return;
|
||||
}
|
||||
const user = new User();
|
||||
|
|
|
@ -7,6 +7,7 @@ import express from 'express';
|
|||
|
||||
import logger from '../../../core/logger';
|
||||
import { getHostFromRequest } from '../../../utils/ip';
|
||||
import passport from '../../../core/passport';
|
||||
|
||||
import register from './register';
|
||||
import verify from './verify';
|
||||
|
@ -30,143 +31,162 @@ import getMe from '../../../core/me';
|
|||
|
||||
const router = express.Router();
|
||||
|
||||
export default (passport) => {
|
||||
router.get('/logout', logout);
|
||||
/*
|
||||
* third party logon
|
||||
*/
|
||||
|
||||
router.get('/facebook', passport.authenticate('facebook',
|
||||
{ scope: ['email'] }));
|
||||
router.get('/facebook/return', (req: Request, res: Response, next) => {
|
||||
passport.authenticate('facebook', (err, user, info) => {
|
||||
if (err) return next(err);
|
||||
if (!user) return next(new Error(info.message));
|
||||
req.logIn(user, (error) => {
|
||||
if (error) return next(error);
|
||||
return res.redirect('/');
|
||||
});
|
||||
return null;
|
||||
})(req, res, next);
|
||||
router.get('/facebook', passport.authenticate('facebook',
|
||||
{ scope: ['email'] }));
|
||||
router.get('/facebook/return', (req: Request, res: Response, next) => {
|
||||
passport.authenticate('facebook', (err, user, info) => {
|
||||
if (err) return next(err);
|
||||
if (!user) return next(new Error(info.message));
|
||||
req.logIn(user, (error) => {
|
||||
if (error) return next(error);
|
||||
return res.redirect('/');
|
||||
});
|
||||
return null;
|
||||
})(req, res, next);
|
||||
});
|
||||
|
||||
router.get('/discord', passport.authenticate('discord',
|
||||
{ scope: ['identify', 'email'] }));
|
||||
router.get('/discord/return', (req: Request, res: Response, next) => {
|
||||
passport.authenticate('discord', (err, user, info) => {
|
||||
if (err) return next(err);
|
||||
if (!user) return next(new Error(info.message));
|
||||
req.logIn(user, (error) => {
|
||||
if (error) return next(error);
|
||||
return res.redirect('/');
|
||||
});
|
||||
return null;
|
||||
})(req, res, next);
|
||||
});
|
||||
|
||||
router.get('/google', passport.authenticate('google',
|
||||
{ scope: ['email', 'profile'] }));
|
||||
router.get('/google/return', (req: Request, res: Response, next) => {
|
||||
passport.authenticate('google', (err, user, info) => {
|
||||
if (err) return next(err);
|
||||
if (!user) return next(new Error(info.message));
|
||||
req.logIn(user, (error) => {
|
||||
if (error) return next(error);
|
||||
return res.redirect('/');
|
||||
});
|
||||
return null;
|
||||
})(req, res, next);
|
||||
});
|
||||
|
||||
router.get('/vk', passport.authenticate('vkontakte',
|
||||
{ scope: ['email'] }));
|
||||
router.get('/vk/return', (req: Request, res: Response, next) => {
|
||||
passport.authenticate('vkontakte', (err, user, info) => {
|
||||
if (err) return next(err);
|
||||
if (!user) return next(new Error(info.message));
|
||||
req.logIn(user, (error) => {
|
||||
if (error) return next(error);
|
||||
return res.redirect('/');
|
||||
});
|
||||
return null;
|
||||
})(req, res, next);
|
||||
});
|
||||
|
||||
router.get('/reddit', passport.authenticate('reddit',
|
||||
{ duration: 'temporary', state: 'foo' }));
|
||||
router.get('/reddit/return', (req: Request, res: Response, next) => {
|
||||
passport.authenticate('reddit', (err, user, info) => {
|
||||
if (err) return next(err);
|
||||
if (!user) return next(new Error(info.message));
|
||||
req.logIn(user, (error) => {
|
||||
if (error) return next(error);
|
||||
return res.redirect('/');
|
||||
});
|
||||
return null;
|
||||
})(req, res, next);
|
||||
});
|
||||
|
||||
// eslint-disable-next-line no-unused-vars
|
||||
router.use((err, req, res, next) => {
|
||||
const host = getHostFromRequest(req);
|
||||
logger.info(`Authentification error ${err}`);
|
||||
const index = getHtml(
|
||||
'OAuth Authentification',
|
||||
err.message, host, req.lang,
|
||||
);
|
||||
res.status(400).send(index);
|
||||
});
|
||||
|
||||
/*
|
||||
* JSON APIs
|
||||
*/
|
||||
|
||||
router.get('/verify', verify);
|
||||
|
||||
router.get('/logout', logout);
|
||||
|
||||
router.get('/resend_verify', resend_verify);
|
||||
|
||||
router.post('/change_passwd', change_passwd);
|
||||
|
||||
router.post('/change_name', change_name);
|
||||
|
||||
router.post('/change_mail', change_mail);
|
||||
|
||||
router.post('/delete_account', delete_account);
|
||||
|
||||
router.post('/restore_password', restore_password);
|
||||
|
||||
router.post('/local', passport.authenticate('json'), async (req, res) => {
|
||||
const { user } = req;
|
||||
const me = await getMe(user, req.lang);
|
||||
logger.info(`User ${user.id} logged in with mail/password.`);
|
||||
res.json({
|
||||
success: true,
|
||||
me,
|
||||
});
|
||||
|
||||
router.get('/discord', passport.authenticate('discord',
|
||||
{ scope: ['identify', 'email'] }));
|
||||
router.get('/discord/return', (req: Request, res: Response, next) => {
|
||||
passport.authenticate('discord', (err, user, info) => {
|
||||
if (err) return next(err);
|
||||
if (!user) return next(new Error(info.message));
|
||||
req.logIn(user, (error) => {
|
||||
if (error) return next(error);
|
||||
return res.redirect('/');
|
||||
});
|
||||
/*
|
||||
router.post('/local', async (req: Request, res: Response, next) => {
|
||||
passport.authenticate('json', async (err, user, info) => {
|
||||
if (!user) {
|
||||
res.status(400);
|
||||
res.json({
|
||||
errors: [info.message],
|
||||
});
|
||||
return null;
|
||||
})(req, res, next);
|
||||
});
|
||||
|
||||
router.get('/google', passport.authenticate('google',
|
||||
{ scope: ['email', 'profile'] }));
|
||||
router.get('/google/return', (req: Request, res: Response, next) => {
|
||||
passport.authenticate('google', (err, user, info) => {
|
||||
if (err) return next(err);
|
||||
if (!user) return next(new Error(info.message));
|
||||
req.logIn(user, (error) => {
|
||||
if (error) return next(error);
|
||||
return res.redirect('/');
|
||||
});
|
||||
return null;
|
||||
})(req, res, next);
|
||||
});
|
||||
|
||||
router.get('/vk', passport.authenticate('vkontakte',
|
||||
{ scope: ['email'] }));
|
||||
router.get('/vk/return', (req: Request, res: Response, next) => {
|
||||
passport.authenticate('vkontakte', (err, user, info) => {
|
||||
if (err) return next(err);
|
||||
if (!user) return next(new Error(info.message));
|
||||
req.logIn(user, (error) => {
|
||||
if (error) return next(error);
|
||||
return res.redirect('/');
|
||||
});
|
||||
return null;
|
||||
})(req, res, next);
|
||||
});
|
||||
|
||||
router.get('/reddit', passport.authenticate('reddit',
|
||||
{ duration: 'temporary', state: 'foo' }));
|
||||
router.get('/reddit/return', (req: Request, res: Response, next) => {
|
||||
passport.authenticate('reddit', (err, user, info) => {
|
||||
if (err) return next(err);
|
||||
if (!user) return next(new Error(info.message));
|
||||
req.logIn(user, (error) => {
|
||||
if (error) return next(error);
|
||||
return res.redirect('/');
|
||||
});
|
||||
return null;
|
||||
})(req, res, next);
|
||||
});
|
||||
|
||||
router.use((err, req, res, next) => {
|
||||
if (err) {
|
||||
const host = getHostFromRequest(req);
|
||||
logger.info(`Authentification error ${err}`);
|
||||
const index = getHtml(
|
||||
'OAuth Authentification',
|
||||
err.message, host, req.lang,
|
||||
);
|
||||
res.status(400).send(index);
|
||||
} else {
|
||||
next();
|
||||
return;
|
||||
}
|
||||
});
|
||||
logger.info(`User ${user.id} logged in with mail/password.`);
|
||||
|
||||
router.get('/verify', verify);
|
||||
|
||||
router.get('/logout', logout);
|
||||
|
||||
router.get('/resend_verify', resend_verify);
|
||||
|
||||
router.post('/change_passwd', change_passwd);
|
||||
|
||||
router.post('/change_name', change_name);
|
||||
|
||||
router.post('/change_mail', change_mail);
|
||||
|
||||
router.post('/delete_account', delete_account);
|
||||
|
||||
router.post('/restore_password', restore_password);
|
||||
|
||||
// while previous auth methosed work by redirect,
|
||||
// local strategy is an json API
|
||||
router.post('/local', async (req: Request, res: Response, next) => {
|
||||
passport.authenticate('json', async (err, user, info) => {
|
||||
if (!user) {
|
||||
res.status(400);
|
||||
req.logIn(user, async (e) => {
|
||||
if (e) {
|
||||
logger.warn(`Login Error:${e.message}`);
|
||||
res.json({
|
||||
errors: [info.message],
|
||||
success: false,
|
||||
errors: ['Failed to establish session. Please try again later :('],
|
||||
});
|
||||
return;
|
||||
}
|
||||
logger.info(`User ${user.id} logged in with mail/password.`);
|
||||
|
||||
req.logIn(user, async (e) => {
|
||||
if (e) {
|
||||
logger.warn(`Login Error:${e.message}`);
|
||||
res.json({
|
||||
success: false,
|
||||
errors: ['Failed to establish session. Please try again later :('],
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
user.ip = req.user.ip;
|
||||
const me = await getMe(user, req.lang);
|
||||
res.json({
|
||||
success: true,
|
||||
me,
|
||||
});
|
||||
user.ip = req.user.ip;
|
||||
const me = await getMe(user, req.lang);
|
||||
res.json({
|
||||
success: true,
|
||||
me,
|
||||
});
|
||||
})(req, res, next);
|
||||
});
|
||||
})(req, res, next);
|
||||
});
|
||||
*/
|
||||
|
||||
router.post('/register', register);
|
||||
|
||||
// eslint-disable-next-line no-unused-vars
|
||||
router.use((err, req, res, next) => {
|
||||
console.warn(`ERROR HANDLER CALLED ${err.message}`);
|
||||
res.status(400);
|
||||
res.json({
|
||||
errors: [err.message],
|
||||
});
|
||||
});
|
||||
|
||||
router.post('/register', register);
|
||||
|
||||
return router;
|
||||
};
|
||||
export default router;
|
||||
|
|
|
@ -85,6 +85,6 @@ router.get('/chathistory', chatHistory);
|
|||
|
||||
router.get('/me', me);
|
||||
|
||||
router.use('/auth', auth(passport));
|
||||
router.use('/auth', auth);
|
||||
|
||||
export default router;
|
||||
|
|
|
@ -108,10 +108,7 @@ class RedisStore extends Store {
|
|||
const key = this.prefix + sid;
|
||||
this.client
|
||||
.del(key)
|
||||
.then((amount) => {
|
||||
if (amount === 0) {
|
||||
throw new Error('No such session exists');
|
||||
}
|
||||
.then(() => {
|
||||
cb(null);
|
||||
})
|
||||
.catch((err) => {
|
||||
|
|
Loading…
Reference in New Issue
Block a user