【问题标题】:Issue with Google oAuth2 callback using Firebase functions使用 Firebase 函数的 Google oAuth2 回调问题
【发布时间】:2019-12-24 13:40:38
【问题描述】:

我想使用 Firebase 函数来使用 Google Developer API。使用此 API 需要进行身份验证。

我关注文档:https://github.com/googleapis/google-api-nodejs-client

在回调url中获取授权码有些麻烦。

var {google} = require('googleapis');
google.options({ auth: oauth2Client });

var oauth2Client = new google.auth.OAuth2(
  'XXXX.apps.googleusercontent.com',
  'XXXX',
  'https://us-central1-XXXX.cloudfunctions.net/oauth2callback'
);

function generateAuthenticationUrl() {

  return oauth2Client.generateAuthUrl({
    access_type: 'offline',
    prompt: 'consent',
    scope: 'https://www.googleapis.com/auth/androidpublisher'
  });
}

exports.oauth2Callback = functions.https.onRequest((req, res) => {
  console.log(req.query.code);
  const code = req.query.code;
  //do something
  return null;
});


exports.hello = functions.https.onRequest((req, res) => {
  var url = generateAuthenticationUrl();
  console.log(url);

  //-> url print in the console is : https://accounts.google.com/o/oauth2/v2/auth?access_type=offline&prompt=consent&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fandroidpublisher&response_type=code&client_id=XXXXX-XXX.apps.googleusercontent.com&redirect_uri=https%3A%2F%2Fus-central1-XXX.cloudfunctions.net%2Foauth2callback

  res.redirect(url);
});

在 Google 控制台开发者中设置重定向 url:

当我调用 URL https://us-central1-XXX.cloudfunctions.net/hello 时,我在 Firebase 日志中收到“错误:无法处理请求”和“状态已完成:'超时'”。

怎么了?

【问题讨论】:

  • 您好,您是否尝试过检索访问令牌,如here 所示?另外,您是否完全按照guide 的步骤进行操作?
  • 我使用 JWT 发布了我的解决方案 :)

标签: node.js firebase google-cloud-functions google-oauth


【解决方案1】:

我找到了解决方案。 完整代码使用 JWT 进行身份验证,然后获取应用的评论列表:

const functions = require('firebase-functions')
const admin = require('firebase-admin')
admin.initializeApp(functions.config().firebase);

var {google} = require('googleapis');
const serviceAccount = require('./client_secret.json');
const { JWT } = require('google-auth-library');


const getAuthorizedClient = () => new JWT({
    email: serviceAccount.client_email,
    key: serviceAccount.private_key,
    scopes: ['https://www.googleapis.com/auth/androidpublisher']
});

const getAndroidpublisher = () => google.androidpublisher({
    version: 'v3',
    auth: getAuthorizedClient()
});



const requestProductValidation = () => new Promise((resolve, reject) => {

    getAndroidpublisher().reviews.list({
            packageName: "com.my.packagename"
        }, (err, response) => {

        if (err) {
            console.log(`The API returned an error: ${err}`);
            resolve({status: "Error"});
        } else {

           return resolve(response);

        }
    });
});


exports.hello = functions.https.onRequest((req, res) => {   
      return requestProductValidation();
});

【讨论】:

    猜你喜欢
    • 2019-04-21
    • 2021-01-18
    • 1970-01-01
    • 1970-01-01
    • 2021-06-09
    • 2014-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多