如何在angular 5应用中从Gmail API获取授权代码

时间:2018-08-14 12:49:12

标签: javascript angular google-api gmail-api

我正在使用Angular应用程序,我想在此Angular应用程序中添加Gmail。

我已遵循本教程https://medium.com/@mcflyDev/angular-2-or-4-import-google-contacts-d0ffb13d8626

一切正常,我收到access_token的成功回复,但没有得到authorization_code

如何获得authorization_code

这是我的配置:

     this.auth2 = gapi.auth2.init({
        client_id: 'bla-bla-bla-2.apps.googleusercontent.com',
        cookiepolicy: 'single_host_origin',
        scope: 'https://www.googleapis.com/auth/gmail.readonly',
        access_type: 'offline',
        response_type: 'code',
        auth_uri: 'https://accounts.google.com/o/oauth2/v2/auth',
        prompt: 'select_account',
        include_granted_scopes: true,
        grant_type: 'authorization_code',
      });

此外,我也没有得到refresh_token,因为您已经看到我已经设置了access_type: 'offline'

enter image description here

如上图所示,我正在收到此响应。

谢谢。

3 个答案:

答案 0 :(得分:1)

我找到了解决方案。早些时候,我进行了POST Ajax调用,但这不是必需的。

我们只需要分两步进行一个小的设置:

步骤1。准备网址:

URL应该如下所示:

 https://accounts.google.com/o/oauth2/auth?redirect_uri=:your_redirect_url&response_type=code&client_id=:your_client_id&scope=https://www.googleapis.com/auth/gmail.send&approval_prompt=force&access_type=offline

您可以将该URL粘贴到浏览器中,然后按Enter键以确认其正常工作。

第2步。在HTML中创建锚标记:

<a href="giveAboveURLHere">Connect With Gmail</a>

恭喜!!!你完成了。

每当用户单击此链接时,Google都会请求提供的范围的权限,如果最终用户授予了访问权限,则Google会使用redirect_url重定向到给定的authorization_code查询参数。

然后在服务器端,您需要使用此API进行另一个authorization_code调用,然后Google将提供access_tokenrefresh_token

谢谢,希望对您有所帮助。

答案 1 :(得分:0)

@Arpit Meena 我找到了另一种解决方案:

在“与Gmail连接”按钮上,单击“我运行this.auth2.grantOfflineAccess()”。

它会触发google帐户选择弹出窗口,然后在该弹出窗口之后立即向范围授予权限。它返回authorization_code,可用于在我的API($gClient->authenticate($code);)中获取refresh_token和access_token。

答案 2 :(得分:0)

这是我发现最好使用 js 客户端库获取身份验证代码的方法。 在 g 站点上仅提及 http/rest 方法。

function initClient() {
            gapi.client.init({
              apiKey: API_KEY,
              clientId: CLIENT_ID,
              discoveryDocs: DISCOVERY_DOCS,
              scope: SCOPES,
              access_type:'offline',
              include_granted_scopes: true
            }).then(function () {
         
              offinebutton.onclick = offlinefunction;
              
            }, function(error) {
              appendPre(JSON.stringify(error, null, 2));
            });
          }

    function offlinefunction() {
            gapi.auth2.getAuthInstance().grantOfflineAccess().then(function(resp) {
            console.log(resp.code)
            });
          }