ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Google使用Javascript API登录而不触发弹出窗口

2019-10-04 06:34:21  阅读:325  来源: 互联网

标签:javascript jquery google-api google-oauth google-plus


我使用以下代码让用户能够通过Javascript API使用他们的Google帐户登录.

HTML

< a id =“gp_login”href =“javascript:void(0)”onclick =“javascript:googleAuth()”>使用Google登录< / a>

使用Javascript

function gPOnLoad(){
     // G+ api loaded
     document.getElementById('gp_login').style.display = 'block';
}
function googleAuth() {
    gapi.auth.signIn({
        callback: gPSignInCallback,
        clientid: googleKey,
        cookiepolicy: "single_host_origin",
        requestvisibleactions: "http://schema.org/AddAction",
        scope: "https://www.googleapis.com/auth/plus.login email"
    })
}

function gPSignInCallback(e) {
    if (e["status"]["signed_in"]) {
        gapi.client.load("plus", "v1", function() {
            if (e["access_token"]) {
                getProfile()
            } else if (e["error"]) {
                console.log("There was an error: " + e["error"])
            }
        })
    } else {
        console.log("Sign-in state: " + e["error"])
    }
}

function getProfile() {
    var e = gapi.client.plus.people.get({
        userId: "me"
    });
    e.execute(function(e) {
        if (e.error) {
            console.log(e.message);
            return
        } else if (e.id) {
            // save profile data
        }
    })
}(function() {
    var e = document.createElement("script");
    e.type = "text/javascript";
    e.async = true;
    e.src = "https://apis.google.com/js/client:platform.js?onload=gPOnLoad";
    var t = document.getElementsByTagName("script")[0];
    t.parentNode.insertBefore(e, t)
})()

这段代码工作正常.
我想使用上面的代码(使用Javascript)从他们的Google帐户登录用户,而不会触发弹出窗口.例如,用户单击登录链接,在同一窗口/选项卡中询问应用程序权限,用户授予权限,用户重定向回Google登录链接所在的页面,保存配置文件数据并登录用户.

解决方法:

Google API不提供此类功能.你应该坚持使用gapi.auth.signIn.我知道只有一种方法可以使它工作,但它非常hacky.

gapi.auth.signIn打开身份验证窗口.
在app1中保存身份验证窗口网址.
而不是调用gapi.auth.signIn,将用户重定向到该URL.

要将成功的身份验证重定向回您的网站,请在url2中添加/修改redirect_url param.请记住,redirect_uri必须在开发人员控制台中注册.

例:
https://accounts.google.com/o/oauth2/auth?client_id=1234567890.apps.googleusercontent.com&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fplus.login&immediate=false&response_type=token&安培; REDIRECT_URI = http://example.com

这样谷歌会将用户重定向回您的网站. access_token是通过GET参数提供的.

1如果谷歌改变他们的API,这可能会破坏(因为这种方法绕过了JS API,并假设所有那些URL中的参数永远都会得到支持).

2Redirect_url是在offline access flow documentation中引入的.我认为这个参数不适用于任何其他情况.

我强烈建议不要使用这个想法(因为它绕过JS API并使用未记录的功能).坚持使用gapi.auth.signIn.

标签:javascript,jquery,google-api,google-oauth,google-plus
来源: https://codeday.me/bug/20191004/1852211.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有