通过Google登录网站保持Web App用户登录

时间:2016-11-28 17:10:33

标签: google-signin google-oauth2

我已经构建了一个使用Google联合登录作为唯一登录选项(https://developers.google.com/identity/sign-in/web/)的Web应用程序。目前,每次用户访问网络应用时,系统都会提示他们选择Google帐户并输入密码。如果用户之前已登录过该应用,或者当前已登录到正确的Google帐户,我想绕过登录页面并将其指向应用程序。

上下文:此登录页面的目标是验证登录用户的域。如果登录用户属于某个域(例如@ samplecompany.com),则用户可以继续该应用程序。如果没有,系统会提示他们使用正确的Google帐户登录。

如果可能,我想检查登录用户的域而不提示用户登录。如果没有,我需要找到一种方法让用户在最初返回Web应用程序后绕过登录页面登录Web应用程序。

作为进一步的上下文,登录页面代码的javascript目前是:

<script src="https://apis.google.com/js/api:client.js"></script>
<script>
var googleUser = {};
var startApp = function() {
  gapi.load('auth2', function(){
    auth2 = gapi.auth2.init({
      client_id: 'clientid',
      cookiepolicy: 'single_host_origin'
    });
    var options = new gapi.auth2.SigninOptionsBuilder();
    attachSignin(document.getElementById('button'), options, auth2);
  });
};

function attachSignin(element, options, auth2) {
  auth2.attachClickHandler(element, options,
      function(googleUser) {
            email = googleUser.getBasicProfile().getEmail();
            domain = googleUser.getHostedDomain();
            if (domain == 'samplecompany.com'){
              //Proceed to application               
            }
            else {
            auth2.signOut();
            alert ('Please sign in with samplecompany.com email.'); 
          }

      }, function(error) {
        auth2.signOut();
      });
}
startApp();
</script>

我已经搜索了一种访问基本用户信息的方法,而无需通过OAuth流程,这似乎是不可能的。我真的很感激如何避免要求用户每次访问应用时都要登录,而我需要验证的是用户的域名。

非常感谢!

1 个答案:

答案 0 :(得分:0)

您可以这样做:

步骤1: 当用户使用Google登录“使用Google登录”时,请提供一个复选框“保持登录状态”

第2步:如果用户在通过google登录时选中了“保持登录状态”,则在浏览器中设置cookie,其有效期可能是从现在开始60天,或者是用户电子邮件中的某些内容。 (检查jquery cookie,很容易:https://github.com/js-cookie/js-cookie

第3步:下次用户打开您的Web应用程序时,请检查Cookie是否有效,然后将其重定向到其帐户页面/仪表板

总体上,如果用户选择保持登录状态,则每次访问您的Web应用程序时,它们都会阻止登录过程。如果没有,则必须使用“使用google登录”手动登录。