我如何只允许特定的电子邮件登录到我的网页

问题描述 投票:0回答:3

有两个方面,管理员和用户。我使用的是同一个数据库中的火力为用户和管理员。这意味着,在我的火力认证登记的用户,可以登录到管理网页。我怎么只允许特定管理员的电子邮件登录到管理页面。

例如:管理员拥有[email protected]的电子邮件

用户有各种各样的电子邮件一样[email protected][email protected]等。

我要的是只允许[email protected]能够登录到管理页面,但限制登录用户的电子邮件登录到管理页面。

javascript html firebase firebase-authentication
3个回答
1
投票

我做的是,在后端侧,您的应用程序被正确地固定的假设,即你在你的数据库安全规则,只允许用户以“管理员”配置文件/角色读或写在“管理”数据数据库。

如果不是这种情况下,必须设置正确的安全规则,因为只有从前端的角度保护您的火力地堡的情况下是不够的,因为它不是很难扭转工程师您的应用程序代码,并写一些JavaScript代码,将与互动后端。对于您可以使用Custom Claims

所以,用这种假设,这意味着你需要在前端适应以这样的方式在管理屏幕只能由管理员用户看到。

一个最好的答案是再次使用自定义声明,如下解释https://firebase.google.com/docs/auth/admin/custom-claims#access_custom_claims_on_the_client(节“在客户端上访问自定义声明”),并在此官方火力地堡视频:https://firebase.google.com/docs/auth/admin/custom-claims#access_custom_claims_on_the_client


需要注意的是试图阻止基于他的电子邮件域中的用户可能不是一个很好的解决方案,因为它很容易,在JavaScript的几行代码,注册到你的火力地堡项目像[email protected]或与邮件用户任何其他电子邮件(使用createUserWithEmailAndPassword


1
投票

使用JavaScript,一个简单的解决办法是splitemail,这将返回字符串数组和比较的第二个部分是该域的@字符串。然后,你可以调节你的代码的其余部分的工作只有在标准是true

一个例子是:

const allowedEmailDomain = 'admin.com';

const email = '[email protected]';

if (email.split('@')[1] === allowedEmailDomain) {
  // do something, we accept this email
} else {
  // return an error or do nothing
}

0
投票

只是阻止所有其他域中@ admin.com。

$allowed_domains = array("admin.com");
$email_domain = array_pop(explode("@", $email));
if(!in_array($email_domain, $allowed_domains)) {
    // Not an authorised email 
}

这是简单的。做一个阵列允许域,由@爆炸,获取数组的最后一个元素并检查它是否在允许域数组中存在。

© www.soinside.com 2019 - 2024. All rights reserved.