1

如果电子邮件地址字段中的域与指定列表中的域不匹配,我想在 Auth0 通用锁上显示一个警报窗口。Auth0 规则仅在进行身份验证后运行,我希望在此之前发生一些事情,所以我认为窗口警报可能是有用的。

我在适用于单个域的 Auth0 论坛上找到了这个,在本例中为“test.com”,但我想检查多个域。

lock.once('signin ready', function() {
    document.querySelector("div.auth0-lock-container input[name='email']").addEventListener('change',function(event){
        var username = this.value;
        var getDomain = function(email) { return email.match(/@(?:[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})|(?:(?:[a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,})$/i);};
        if (getDomain(username) !== 'test.com') {
            window.alert("Please make sure you're using an approved email address");
        }
    });
});

我已经尝试将此作为 if 语句,但 window.alert 显示任何域,而不是特定域。那是因为正则表达式不正确还是 if 语句不正确?

lock.once('signin ready', function() {
    document.querySelector("div.auth0-lock-container input[name='email']").addEventListener('change',function(event){
        var username = this.value;
        var getDomain = function(email) { return email.match(/@(?:[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})|(?:(?:[a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,})$/i);};
        if (!['companya.com', 'somecompany.net', 'anothercompany.org'].includes(getDomain(username))) {
            window.alert("Please make sure you're using an approved email address");
        }
    });
});

谢谢!

4

1 回答 1

0

正则表达式乍一看似乎是正确的,但是String.match(以及函数getDomain())不只返回一个字符串,而是一个数组,其中包含有关匹配的更多信息(或null)如果没有匹配(例如不是有效的电子邮件)地址)。数组的第一个元素包含匹配的字符串。文档

因此,您必须首先检查返回值是否不为空,然后获取数组的第一个元素并检查您允许的域

var m = username.match(/@(?:[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})|(?:(?:[a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,})$/i);

if (!m || !["domain1.com", "domain2.com", ...].includes(m[0])) {
    window.alert("Please use ...");
}
于 2020-09-19T09:51:14.973 回答