我正在使用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'
。
如上图所示,我正在收到此响应。
谢谢。
答案 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_token
和refresh_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)
});
}