invalid_grant ошибка при попытке аутентификации пользователя с помощью Google + - PullRequest
0 голосов
/ 19 июня 2019

Я пытаюсь реализовать простой Google Sing, следуя этой статье https://medium.com/@jackrobertscott/how-to-use-google-auth-api-with-node-js-888304f7e3a0

Загружается страница с аутентификацией Google, и я могу выбрать учетную запись, с которой я хочу войти, но после выбора учетной записи она загружается почти бесконечно, а затем выводит

(узел: 8548) UnhandledPromiseRejectionWarning: Ошибка: invalid_grant

в Gaxios.request (C: \ Users \ misha \ Documents \ JavaScriptProjects \ spa \ node_modules \ gaxios \ build \ src \ gaxios.js: 70: 23)

at process._tickCallback (внутренняя / process / next_tick.js: 68: 7)

Я использую express.js в качестве серверной платформы

Вот код моего сервера (я предоставил только необходимые части кода):

Сервер-dev.js

import googleAuthUtil from './utils/google-auth-util';
app.get('/api/v1/googlelogin',(req,res) => {
 res.send(googleAuthUtil.urlGoogle());
});
app.get('/googleAuth',(req,res) => {
  console.log(googleAuthUtil.getGoogleAccountFromCode(req.query.code));
});

. / Utils / Google-AUTH-util.js

import {google} from 'googleapis';

const googleConfig = {
  clientId: '21263739003-l210171qijqppm4u0a0uc3b1rndfq1gj.apps.googleusercontent.com', 
  clientSecret: 'yWaL8LVUHh-39VCZbvNq0Ff8', 
  redirect: 'http://localhost:8080/googleAuth', 
};

const defaultScope = [
  'https://www.googleapis.com/auth/plus.me',
  'https://www.googleapis.com/auth/userinfo.email',
];


function createConnection() {
  return new google.auth.OAuth2(
    googleConfig.clientId,
    googleConfig.clientSecret,
    googleConfig.redirect
  );
}

function getConnectionUrl(auth) {
  return auth.generateAuthUrl({
    access_type: 'offline',
    prompt: 'consent',
    scope: defaultScope
  });
}

function getGooglePlusApi(auth) {
  return google.plus({version: 'v1', auth});
}


const googleUtils = {

  urlGoogle: function () {
    const auth = createConnection();
    const url = getConnectionUrl(auth);
    return url;
  },

  getGoogleAccountFromCode: async function (code) {
    const auth = createConnection();
    const data = await auth.getToken(code);
    const tokens = data.tokens;
    auth.setCredentials(tokens);
    const plus = getGooglePlusApi(auth);
    const me = await plus.people.get({userId: 'me'});
    const userGoogleId = me.data.id;
    const userGoogleEmail = me.data.emails && me.data.emails.length && me.data.emails[0].value;
    return {
      id: userGoogleId,
      email: userGoogleEmail,
      tokens: tokens,
    };
  }
};

export default googleUtils;

Мой проект представляет собой одностраничное приложение, поэтому я отображаю страницы на стороне клиента с помощью файлов js.

Вот мой код внешнего интерфейса (я предоставил только необходимые части кода):

homepage.js

async function getGoogleLoginUrl(){
  const response = await fetch('/api/v1/googlelogin');
  const text = await response.text();
  return text;
}

let homePage = {
  render: async function () {
    let posts = await getPosts();
    let loginUrl = await getGoogleLoginUrl();
    console.log(posts[0].id);
    console.log(posts[0]._id);
    return `<a href="${loginUrl}">Login with google</a>`;
    //my home page is basically a blank screen with a link to google login
  }
};

Как я уже говорил ранее, большая часть логики работает нормально, и она падает только в самом конце 1032 *, когда я выбираю учетную запись, с которой я хочу войти в систему

...