使用Gmail API NodeJS授权错误列出邮件

时间:2018-10-04 08:55:59

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

我写了一个简单的代码来列出来自我的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 小节中进行了验证。我还确保初始化 gmailKey oauth2Client 包含适当的凭据。

如何解决Gmail授权问题?

预先感谢

2 个答案:

答案 0 :(得分:0)

  

“需要登录”,

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

您可能要咨询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

答案 1 :(得分:0)

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

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');