【问题标题】:List Messages using Gmail API NodeJS authorization error使用 Gmail API NodeJS 授权错误列出消息
【发布时间】:2019-03-09 14:44:17
【问题描述】:

我编写了一个简单的代码来列出来自我的 gmail 帐户的消息。但是,在我收到 401 错误。我的代码如下

const gmailKey = google.gmail({version: 'v1', oauth2Client});

var initialRequest = gmailKey.users.messages.list({
    'userId': 'me'
});
getPageOfMessages(initialRequest, []);

var getPageOfMessages = function(request, result) {
    request.execute(function(resp) {
        result = result.concat(resp.messages);
        var nextPageToken = resp.nextPageToken;
            if (nextPageToken) {
                request = gmail.users.messages.list({
                    'userId': 'me',
                    'pageToken': nextPageToken
                });
                getPageOfMessages(request, result);
            }else{
                callback(result);
            }
    });
};

错误是

code: 401,
errors:
[{ domain: 'global',
   reason: 'required',
   message: 'Login Required',
   locationType: 'header',
   location: 'Authorization' }]

oauth2Client 如下

const oauth2Client = new google.auth.OAuth2(
    CLIENT_ID,
    CLIENT_SECRET,
    REDIRECT_URL
);

我使用相同的 oauth2Client 来获取访问令牌,并且还在 .credentials 小节中验证了相同的内容。我还确保初始化 gmailKeyoauth2Client 包含适当的凭据。

如何解决gmail授权问题?

提前致谢

【问题讨论】:

    标签: javascript node.js google-oauth gmail-api google-api-nodejs-client


    【解决方案1】:

    '需要登录',

    意味着您需要通过身份验证才能访问用户数据。

    您可能想咨询Authorizing Your App with Gmail 或这个,但它的驱动器您必须稍微改变它Oauth2 user agent

    var GoogleAuth; // Google Auth object.
    function initClient() {
      gapi.client.init({
          'apiKey': 'YOUR_API_KEY',
          'clientId': 'YOUR_CLIENT_ID',
          'scope': 'https://www.googleapis.com/auth/drive.metadata.readonly',
          'discoveryDocs': ['https://www.googleapis.com/discovery/v1/apis/drive/v3/rest']
      }).then(function () {
          GoogleAuth = gapi.auth2.getAuthInstance();
    
          // Listen for sign-in state changes.
          GoogleAuth.isSignedIn.listen(updateSigninStatus);
      });
    }
    

    如果你使用的是节点,你可以试试node.js quickstart

    【讨论】:

    • 我确实按照您的建议设置了 GoogleAuth 对象,但错误是相同的。您能否指定您如何定义 gapi 对象以及如何调用 users.messages.list 函数
    • 如果您想使用 Google apis js 客户端库而不是 google apis nodejs 客户端库,请参考auth 示例页面。
    【解决方案2】:

    如果您仍然遇到此问题,则未设置授权的问题出在您粘贴的第一行代码中:

    const gmailKey = google.gmail({version: 'v1', oauth2Client});

    设置oauth2Client的正确方法是:

    const gmailKey = google.gmail({version: 'v1', auth: oauth2Client });

    google.options({ auth: oauth2Client }); // sets globally const gmailKey = google.gmail('v1');

    【讨论】:

    • 谢谢!!!!!!
    猜你喜欢
    • 2016-12-09
    • 2021-01-23
    • 2020-06-22
    • 2016-09-21
    • 2016-11-02
    • 2014-10-09
    • 1970-01-01
    • 1970-01-01
    • 2015-09-15
    相关资源
    最近更新 更多