Skip to content

Commit

Permalink
Merge branch 'staging' of https://github.com/andela/apollo-ah-backend
Browse files Browse the repository at this point in the history
…into feature/165378249/single-article-fix
  • Loading branch information
thislekan committed Apr 17, 2019
2 parents ae65ee6 + 53ae427 commit 7bebb86
Show file tree
Hide file tree
Showing 6 changed files with 29 additions and 21 deletions.
3 changes: 3 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@ GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
GOOGLE_CALLBACK_URL=

# Redirect URL to client app (preferably the login page)
CLIENT_REDIRECT_URL=

# sessions details
COOKIE_SECRET=

Expand Down
16 changes: 13 additions & 3 deletions server/config/passport.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { env, validateConfigVariable } from '../helpers/utils';
import logger from '../helpers/logger';
import models from '../models';

const { User } = models;
const { User, Profile } = models;

// Ensure that ENV config variables is set
validateConfigVariable([
Expand Down Expand Up @@ -34,13 +34,23 @@ validateConfigVariable([

export const generateOrFindUser = async (accessToken, refreshToken, profile, done) => {
if (profile.emails[0]) {
const email = profile.emails[0].value;
try {
await User.findOrCreate({ where: { email: profile.emails[0].value } })
await User.findOrCreate({ where: { email } })
/* the "spread" divides the array that findOrCreate method returns
into 2 parts and passes them as
arguments to the callback function,
which treats them as "user" and "created". */
.spread((user, created) => {
.spread(async (user, created) => {
// create user profile
const [firstname, lastname] = profile.displayName.split(' ');
user.firstname = firstname;
user.lastname = lastname;
user.image = profile.photos[0].value;
user.userId = user.id;
user.bio = '';
user.username = email;
await Profile.create(user);
done(null, user);
});
} catch (err) {
Expand Down
16 changes: 3 additions & 13 deletions server/controllers/authController.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { generateToken } from '../helpers/utils';
import { generateToken, env } from '../helpers/utils';
import logger from '../helpers/logger';

/**
Expand All @@ -16,18 +16,8 @@ export default class authController {
static async socialAuth(req, res) {
const { dataValues } = req.user;
try {
const userToken = await generateToken({ email: dataValues.email, id: dataValues.id });
const {
id,
email,
} = dataValues;
return res.status(200).json({
user: {
id,
email,
token: userToken,
}
});
const token = await generateToken({ email: dataValues.email, id: dataValues.id });
res.redirect(`${env('CLIENT_REDIRECT_URL')}?token=${token}`);
} catch (err) {
logger.log(err);
}
Expand Down
2 changes: 1 addition & 1 deletion server/controllers/usersController.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@ class UsersController {
const user = await User.create(body);
const role = await models.Role.findOne({ where: { name: 'user' } });
await user.setRole(role);
const token = await generateToken({ user });
// generate confirm token
const confirmationToken = await generateToken({ email: user.email });
// generate confirm link
Expand All @@ -57,6 +56,7 @@ class UsersController {
await models.Profile.create(user);
// create a user default settings
await models.Setting.create({ userId: user.userId });
const token = await generateToken({ user });
Response.send(response, STATUS.CREATED, { token, id: user.id });
await Mail.sendMail(data);
return;
Expand Down
12 changes: 8 additions & 4 deletions server/routes/auth.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
import express from 'express';
import passport from '../config/passport';
import authController from '../controllers/authController';

import { env } from '../helpers/utils';

const router = express.Router();

const failureRedirect = () => ({
failureRedirect: `${env('CLIENT_REDIRECT_URL')}?failure=true`
});

/**
* @swagger
* definitions:
Expand Down Expand Up @@ -53,7 +57,7 @@ router.get(

router.get(
'/facebook/redirect',
passport.authenticate('facebook', { failureRedirect: '/' }),
passport.authenticate('facebook', failureRedirect()),
authController.socialAuth
);

Expand Down Expand Up @@ -84,7 +88,7 @@ router.get(

router.get(
'/google/redirect',
passport.authenticate('google', { failureRedirect: '/' }),
passport.authenticate('google', failureRedirect()),
authController.socialAuth
);

Expand All @@ -110,7 +114,7 @@ router.get(

router.get(
'/twitter/redirect',
passport.authenticate('twitter', { failureRedirect: '/' }),
passport.authenticate('twitter', failureRedirect()),
authController.socialAuth
);

Expand Down
1 change: 1 addition & 0 deletions test/integrations/routes/auth.test.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
/* eslint-disable no-unused-expressions */
import chai, { expect } from 'chai';
import chaiHttp from 'chai-http';
import app from '../../../server';
Expand Down

0 comments on commit 7bebb86

Please sign in to comment.