我正在建立一个网站。该网站没有用于存储我们员工用户信息的数据库。我们让他们使用自己的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页面。我觉得我在这里错过了一步,而我却没有看到它在哪里。任何有助于此工作的帮助将不胜感激。
答案 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提交。