如何在允许访问我的网站之前验证用户域?

时间:2016-03-07 14:50:25

标签: javascript php

我正在建立一个网站。该网站没有用于存储我们员工用户信息的数据库。我们让他们使用自己的Google帐户登录。如果某人遇到我们的网站,但他们没有域名电子邮件地址,则会将其重定向到错误页面。否则,如果他们拥有我们目前托管的6个域之一,他们将被定向到我们的支持页面。

我遇到的问题是任何拥有Google帐户的人都可以访问该网站,但这不可能发生。

在我们的登录页面上,我们使用google登录javascript,如下所示:

的login.php

<div class="g-signin2" data-onsuccess="onSignIn" data-theme="dark"></div>
    <script type="text/javascript">
      function onSignIn(googleUser) {
                // Useful data for your client-side scripts:
                var profile = googleUser.getBasicProfile();
                console.log("ID: " + profile.getId()); // Don't send this    directly to your server!
                console.log("Email: " + profile.getEmail());

                // The ID token you need to pass to your backend:
                var id_token = googleUser.getAuthResponse().id_token;
                console.log("ID Token: " + id_token);

                if (id_token !=""){
                    window.location = "login_process.php";
                    } 
             };
  </script>

从这里开始,如果用户正常输入他们的Google帐户信息,则会指向我们的login_process.php页面。代码如下:

 $email = $_POST['email'];
 $allowed = array('example.com', 'example.com', 'example.com', 'example.com', 'example.com', 'example.com', 'example.com');

// Make sure the address is valid
if (filter_var($email, FILTER_VALIDATE_EMAIL))
{
$explodedEmail = explode('@', $email);
$auth = array_pop($explodedEmail);

if ( ! in_array($auth, $allowed))
{
    // Not allowed
    header('Location: error.php');
  } 
}else
    {
        // Allowed
        header('Location: support.php')
    } 

如果您的电子邮件地址不包含其中一个必填域,则应该将您重定向到error.php页面。否则,它将允许访问我们的支持页面。

由于某种原因,我不理解,无论您使用哪种Google帐户,它仍然允许访问support.php页面。我觉得我在这里错过了一步,而我却没有看到它在哪里。任何有助于此工作的帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

正如我在评论中所说,试试这个:

在if语句中反转你的逻辑,只有当它与域匹配时才允许重定向到support.php,但并不总是匹配。

if ( in_array($auth, $allowed))
{
   // allowed
    header('Location: support.php');
} else {
    // not allowed
    header('Location: error.php')
} 

您的javascript会进行重定向但不会发布任何表单数据,因此$_POST无法在您的php中运行。您必须使用隐藏在电子邮件中的输入创建隐藏表单,然后使用javascript提交。