Должен ли я иметь свой собственный сервер для авторизации google oauth 2.0? - PullRequest
0 голосов
/ 30 января 2020

Я сделал сервер, который проверяет токен доступа (google).

токен. js

import passport from 'passport';
import { Strategy as GoogleTokenStrategy } from 'passport-google-token';
import * as dotenv from 'dotenv';

dotenv.config();

const GoogleTokenStrategyCallback = (
  accessToken,
  refreshToken,
  profile,
  done
) =>
  done(null, {
    accessToken,
    refreshToken,
    profile,
  });

passport.use(
  new GoogleTokenStrategy(
    {
      clientID: process.env.GOOGLE_CLIENT_ID,
      clientSecret: process.env.GOOGLE_CLIENT_SECRET,
    },
    GoogleTokenStrategyCallback
  )
);

const authenticateGoogle = (req, res) =>
  new Promise((resolve, reject) => {
    passport.authenticate(
      'google-token',
      { session: false },
      (err, data, info) => {
        if (err) {
          reject(err);
        }
        resolve({ data, info });
      }
    )(req, res);
  });

module.exports = { authenticateGoogle };

user.mutation. js

export const Mutation = {
  signInWithGoogle: async (obj, args, { db, req, res }) => {
    // insert a token into the request.
    req.body = {
      ...req.body,
      access_token: args.accessToken,
    };

    try {
      const { data, info } = await authenticateGoogle(req, res);

      if (data) {
        // obtain an email from the google profile
        const {
          profile: {
            _json: { email },
          },
        } = data;
...

как и выше, сервер получит токен доступа от пользователя. До того, как я это сделал, я не думал о том, откуда пользователи получат токен доступа.

Я искал по этому поводу inte rnet, но все примеры (только я нашел) используют их сервер для моста (URL перенаправления) между веб-интерфейсом и Google.

Но я хочу разделить серверы каждого из них. как

[Frontend (React) Server] - [Backend GraphQL Server]

Вот почему я сделал функцию проверки google-access-token. Как пользователи могут получить токен доступа от Google без my-frontend-server?

Должен ли я иметь свой собственный сервер для этого?

...