javascript - Google+ Oauth 2.0 - 注销效果很好,但刷新网页后自动登录

标签 javascript google-app-engine oauth google-plus logout

标题

我正在开发 Google App Engine。将 Python 与 webbapp2 框架结合使用。

我使用 Google API 登录和注销。看起来效果不错。登录和注销都很完美。这是Google官方指南:https://developers.google.com/+/web/signin/

问题是,注销后刷新页面后,用户会自动再次登录。

这是带有相关参数的登录按钮:

    <span
        class="g-signin"
        data-callback="signinCallback"
        data-clientid="##################.apps.googleusercontent.com"
        data-cookiepolicy="single_host_origin"
        data-requestvisibleactions="http://schemas.google.com/AddActivity"
        data-scope="https://www.googleapis.com/auth/plus.login https://www.googleapis.com/auth/userinfo.email">
        <button type="button">GOOGLE+ LOGIN</button>
    </span>

这是注销按钮:

    <button onclick="disconnectUser()">Disconnect</button>

这是注销回调函数:

<script type="text/javascript">
        function disconnectUser(access_token) {
          var revokeUrl = 'https://accounts.google.com/o/oauth2/revoke?token=' +
              access_token;

          // Esecuzione di una richiesta GET asincrona.
          $.ajax({
            type: 'GET',
            url: revokeUrl,
            async: false,
            contentType: "application/json",
            dataType: 'jsonp',
            success: function(nullResponse) {
              // Esegui un'azione, l'utente è disconnesso
              // La risposta è sempre indefinita.

                document.getElementById('signinButton').setAttribute('style', 'display: inherit');
                document.getElementById('revokeButton').setAttribute('style', 'display: none');
            },
            error: function(e) {
              // Gestione dell'errore
              // console.log(e);
              // Puoi indirizzare gli utenti alla disconnessione manuale in caso di esito negativo
              // https://plus.google.com/apps
            }
          });
        }
        // È possibile attivare la disconnessione con un clic del pulsante
        $('#revokeButton').click(disconnectUser);
    </script>

你觉得怎么样?可能是什么问题呢?关于 cookie 设置的事情?

最佳答案

您应该调用 gapi.auth.signOut() 来注销用户。正如您在此处实现的那样,断开连接将断开用户与您的应用程序的连接,并取消您的应用程序代表用户进行 API 调用的授权。一个例子是:

<button onclick="gapi.auth.signOut()">Sign out</button>

参见Signing out the user有关如何正确注销用户的更多信息。

还值得注意的是:

  • 如果您从本地主机运行,注销可能无法正常工作。
  • 登录回调也会在失败时调用:确保检查错误消息是否缺失,即:

    function signinCallback(authResult) {                                          
      if (authResult['status']['signed_in']) {                                  
          // Signed in                                                            
        } else {                                                                  
          console.log('Sign-in failed: ' + authResult['error']);                  
        }                                                                         
    }    

关于javascript - Google+ Oauth 2.0 - 注销效果很好,但刷新网页后自动登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28325645/

相关文章:

google-app-engine - 如何在 Ubuntu 上设置 Google App Engine PHP SDK

python - 用户身份验证如何在使用 Python 的 Google Sheets API 中进行?

javascript - 谷歌分析实时未显示在购物行为中

php - 使用 AJAX 发送具有可变字段数的表单,$_POST 数组为空

python - Python 中的类型 - Google Appengine

java - 开发服务器上的应用程序引擎数据存储统计信息

android - Chrome 自定义标签页重定向到 Android 应用程序将关闭该应用程序

python - 使用 Azure Active Directory 进行身份验证 - 如何以编程方式接受用户凭据

javascript - 单元格之间的链接不是 "flat"- JointJS

javascript - 允许带有哈希值的 href 链接绕过 SammyJS 路由