mirror of
https://github.com/mjrode/WhatToWatch.git
synced 2026-05-07 13:09:08 -05:00
Google oAuth
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -4,6 +4,7 @@ module.exports = (sequelize, DataTypes) => {
|
||||
{
|
||||
firstName: DataTypes.STRING,
|
||||
lastName: DataTypes.STRING,
|
||||
googleId: DataTypes.STRING,
|
||||
email: {type: DataTypes.STRING, unique: true},
|
||||
},
|
||||
{},
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
},
|
||||
),
|
||||
|
||||
Reference in New Issue
Block a user