【发布时间】:2015-09-24 14:23:42
【问题描述】:
我使用 Google Plus 作为登录名,直到最近才正常使用。现在用户不能再注销了。回调起作用并返回用户已注销,但之后它会立即再次将用户登录。似乎它没有存储注销。
对此有一些较早的问题,例如this one。我尝试了所有建议的解决方案,但没有任何效果。
html头中的代码
<script src="https://apis.google.com/js/client:platform.js?onload=start" async defer></script>
按钮代码,始终显示(登录时隐藏)
<div id="signinButton">
<span class="g-signin"
data-scope="https://www.googleapis.com/auth/gmail.readonly"
data-clientid="{{ CLIENT_ID }}"
data-redirecturi="postmessage"
data-accesstype="offline"
data-cookiepolicy="single_host_origin"
data-callback="signInCallback">
</span>
</div>
登录和注销功能
<script>
function signInCallback(authResult) {
//console.log(authResult)
if (authResult['code']) {
var state = encodeURIComponent('{{ STATE }}');
var code = encodeURIComponent(authResult['code']);
var tz = encodeURIComponent($('#timezone').val());
var cntry = encodeURIComponent($('#country').val());
var lan = encodeURIComponent('{{ language }}');
// Send the code to the server
$.ajax({
type: 'POST',
url: '/signup/gauth',
contentType: 'application/octet-stream; charset=utf-8',
success: function(result) {
console.log(result)
if (result == 'Success') {
{% if not user %}window.location = "/user/home";{% else %}
console.log('Logged in');{% endif %}
}
},
processData: false,
data: 'code='+code+'&state='+state+'&country='+cntry+'&tz='+tz+'&language='+lan
});
}
else if (authResult['error']) {
console.log('Sign-in state: ' + authResult['error']);
}
}
function signOut() {
gapi.auth.signOut();
window.location = "/user/logout"
}
</script>
【问题讨论】:
-
嘿文森特,你检查过我正在使用的这种新的和改进的方法吗?编辑了我的答案,它应该可以解决您的问题。如果您以不同的方式解决它,请发布您的解决方案,我想研究不同的方法。谁说我不是在重新发明轮子 - 方形版本?
-
嗨,托尼,感谢您添加答案。我通过切换到后端授权来解决它,基本上摆脱了整个 javascript 实现。因此,我很遗憾无法确认您的解决方案。
-
没关系@vincent,似乎有几个人检查了解决方案并批准了它。因为我没有得到负面评价,所以无论如何我对赏金的结果都很满意。
标签: google-api google-plus google-signin