Google oAuth

This commit is contained in:
mjrode
2019-03-31 18:55:38 -05:00
parent bd0d4a0c0b
commit a8d934fdae
6 changed files with 55 additions and 19 deletions
+19 -12
View File
@@ -1,22 +1,29 @@
import {Router} from 'express';
import passport from 'passport';
import authService from '../services/auth';
const router = Router();
router.get('/google', authService.getAuthToken);
router.get(
'/google',
passport.authenticate('google', {
scope: ['profile', 'email'],
}),
(req, res) => {
res.redirect('/');
},
);
router.get('/users', plexService.getUsers);
router.get('/google/callback', passport.authenticate('google'), (req, res) => {
res.redirect('/');
});
router.get('/most-watched', plexService.getMostWatched);
router.get('/import/most-watched', plexService.importMostWatched);
router.get('/api/current_user', (req, res) => {
res.send(req.user);
});
router.get('/sections', plexService.getSections);
router.get('/import/sections', plexService.importSections);
router.get('/library/:id', plexService.getLibraryDataBySection);
router.get('/import/libraries', plexService.importLibraries);
router.get('/import/all', plexService.importAll);
router.get('/api/logout', (req, res) => {
req.logout();
res.redirect('/');
});
export default router;
@@ -13,6 +13,9 @@ module.exports = {
lastName: {
type: Sequelize.STRING,
},
googleId: {
type: Sequelize.STRING,
},
email: {
type: Sequelize.STRING,
unique: true,
+1
View File
@@ -4,6 +4,7 @@ module.exports = (sequelize, DataTypes) => {
{
firstName: DataTypes.STRING,
lastName: DataTypes.STRING,
googleId: DataTypes.STRING,
email: {type: DataTypes.STRING, unique: true},
},
{},
+14
View File
@@ -1,9 +1,12 @@
import express from 'express';
import {json, urlencoded} from 'body-parser';
// eslint-disable-next-line import/named
import passport from 'passport';
import {sequelize} from './db/models';
import plex from './routes/plex.route';
import tdaw from './routes/tdaw.route';
import auth from './routes/auth.route';
require('./services/auth/passport');
export default () => {
const server = express();
@@ -18,9 +21,13 @@ export default () => {
server.use(json());
server.use(urlencoded({extended: true}));
server.use(passport.initialize());
server.use(passport.session());
// Set up routes
server.use('/plex', plex);
server.use('/tdaw', tdaw);
server.use('/auth', auth);
server.get('*', function(req, res, next) {
const err = new Error('Page Not Found');
@@ -28,6 +35,13 @@ export default () => {
next(err);
});
if (process.env.NODE_ENV === 'production') {
app.use(express.static('client/build'));
const path = require('path');
app.get('*', (req, res) => {
res.sendFile(path.resolve(__dirname, 'client', 'build', 'index.html'));
});
}
// eslint-disable-next-line no-unused-vars
server.use(function(err, req, res, next) {
console.error(err.message); // Log error message in our server's console
+16 -7
View File
@@ -1,15 +1,15 @@
const passport = require('passport');
const GoogleStrategy = require('passport-google-oauth20').Strategy;
const keys = require('../config/keys');
const keys = require('../../../config');
const User = mongoose.model('users');
import models from '../../db/models';
passport.serializeUser((user, done) => {
done(null, user.id);
});
passport.deserializeUser((id, done) => {
User.findById(id).then(user => {
models.User.find(id).then(user => {
done(null, user);
});
});
@@ -17,19 +17,28 @@ passport.deserializeUser((id, done) => {
passport.use(
new GoogleStrategy(
{
clientID: keys.googleClientID,
clientSecret: keys.googleClientSecret,
clientID: keys.default.server.googleClientID,
clientSecret: keys.default.server.googleClientSecret,
callbackURL: '/auth/google/callback',
proxy: true,
},
async (accessToken, refreshToken, profile, done) => {
const existingUser = await User.findOne({googleId: profile.id});
console.log(profile);
const existingUser = await models.User.findOne({
where: {googleId: profile.id},
});
if (existingUser) {
return done(null, existingUser);
}
const user = await new User({googleId: profile.id}).save();
const user = await models.User.create({
firstName: profile.name.givenName,
lastName: profile.name.familyName,
email: profile.emails[0].value,
googleId: profile.id,
});
console.log('mikes user', user);
done(null, user);
},
),