Skip to content

Commit

Permalink
#164796889-twitter-authentication
Browse files Browse the repository at this point in the history
add twitter authentication to authors haven

[finishes #164796889]
  • Loading branch information
Oluwaseyi000 committed Apr 10, 2019
1 parent 01d42a2 commit be32fd0
Show file tree
Hide file tree
Showing 6 changed files with 40 additions and 69 deletions.
32 changes: 15 additions & 17 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 5 additions & 3 deletions src/config/passportConfig.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
let CALLBACK_URL = `http://${process.env.HOST}:${process.env.PORT}/api/v1/auth/facebook/callback`;
let CALLBACK_URL_TWITTER = `http://${process.env.HOST}:${process.env.PORT}/api/v1/auth/twitter/callback`;

if (process.env.NODE_ENV === 'production') {
CALLBACK_URL = `https://${process.env.HOST}:${process.env.PORT}/api/v1/auth/facebook/callback`;
CALLBACK_URL_TWITTER = `https://${process.env.HOST}:${process.env.PORT}/api/v1/auth/twitter/callback`;
}

export default {
Expand All @@ -18,9 +20,9 @@ export default {
profileFields: ['id', 'email', 'displayName', 'photos'],
},
twitterAuth: {
consumerKey: 'Y7SLg4Y0eR6n3203QcpGWAVlB',
consumerSecret: 'ua3XAGiBZinEX8toPlfOB2XNqL1MXf8VYzZapirjB6364p4K3r',
callbackURL: 'http://localhost:4000/api/v1/auth/twitter/callback',
consumerKey: process.env.TWITTER_CONSUMER_KEY,
consumerSecret: process.env.TWITTER_CONSUMER_SECRET,
callbackURL: CALLBACK_URL_TWITTER,
includeEmail: true,
}
};
9 changes: 1 addition & 8 deletions src/controllers/authentication/user.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,5 @@ const login = (req, res) => {
}));
};

const twitterLogin = (req, res) => res.status(200).json(responseFormat({
success: true,
data: {
token: req.session.passport.user
},
}));


export { login, twitterLogin };
export default login;
51 changes: 15 additions & 36 deletions src/middlewares/socialCallback.js
Original file line number Diff line number Diff line change
@@ -1,47 +1,26 @@
import { User } from '../models';
import Auth from './authenticator';

const strategyCallback = async (accessToken, refreshToken, profile, done) => {
const {
id, displayName, photos, emails, username
} = profile;

const user = await User.findOrCreate({
where: { email: emails[0].value },
defaults: {
fullName: displayName,
password: id,
email: emails[0].value,
username: emails[0].value,
imageUrl: photos[0].value,
},
});
return done(null, user.dataValues);
try {
const [user] = await User.findOrCreate({
where: { email: emails[0].value },
defaults: {
fullName: displayName,
password: id,
email: emails[0].value,
username,
imageUrl: photos[0].value,
},
});
return done(null, user.dataValues);
} catch (error) {
return done(null, error);
}
};


// const loggedinUser = user[0].dataValues;
// console.log(Auth.generateToken({ id, displayName, username }));


// return done(null, loggedinUser);
const loggedinUser = user[0].dataValues;

const token = Auth.generateToken({
id: loggedinUser.id,
fullName: loggedinUser.fullName,
email: loggedinUser.email,
username: loggedinUser.username,
imageUrl: loggedinUser.imageUrl,
bio: loggedinUser.bio,
role: loggedinUser.HTMLTableRowElement,
isNew: user[0].isNewRecord,
});


return done(null, token);
};



export default strategyCallback;
6 changes: 3 additions & 3 deletions src/routers/index.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Router } from 'express';
import passport from 'passport';
import { login, twitterLogin } from '../controllers/authentication/user';
import login from '../controllers/authentication/user';
import passportAuth from '../middlewares/passport';
import { AddArticles, UpdateArticle, DeleteArticle } from '../controllers/article';
import checkFields from '../middlewares/auth/loginValidator';
Expand Down Expand Up @@ -46,8 +46,8 @@ router.get('/auth/google/callback', passport.authenticate('google', { failureRed

// route for twitter authentication
router.get('/auth/twitter', passport.authenticate('twitter'));
router.get('/auth/twitter/callback', passport.authenticate('twitter', { failureRedirect: '/loginFail', successRedirect: '/api/v1/twitter-success' }));
router.get('/twitter-success', twitterLogin);

router.get('/auth/twitter/callback', passport.authenticate('twitter', { failureRedirect: '/api/v1/auth/login' }), socialRedirect);


router.post('/login', checkFields, passportAuth, login);
Expand Down
3 changes: 1 addition & 2 deletions src/server.js
Original file line number Diff line number Diff line change
Expand Up @@ -48,15 +48,14 @@ export const startServer = port => new Promise((resolve, reject) => {
app.use('/api/v1', router);
passport.use(socialStrategy.facebookStrategy);
passport.use(socialStrategy.googleStrategy);

passport.use(socialStrategy.twitterStrategy);
passport.serializeUser((user, done) => {
done(null, user);
});

passport.deserializeUser((user, done) => {
done(null, user);
});
passport.use(socialStrategy.twitterStrategy);
app.use('/docs', swaggerUI.serve, swaggerUI.setup(docs));

app.use((req, res, next) => {
Expand Down

0 comments on commit be32fd0

Please sign in to comment.