如果用户名/电子邮件与特定域不匹配,则显示窗口警报

Posted

技术标签:

【中文标题】如果用户名/电子邮件与特定域不匹配,则显示窗口警报【英文标题】:Show window alert if username / email doesn't match specific domains 【发布时间】:2021-01-06 01:36:45 【问题描述】:

如果电子邮件地址字段中的域与指定列表中的域不匹配,我想在 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");
        
    );
);

谢谢!

【问题讨论】:

【参考方案1】:

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

所以你必须先检查返回值是否不为空,然后取数组的第一个元素并检查你允许的域

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 ...");

【讨论】:

啊,我明白你的意思了。效果很好,非常感谢 derpirscher!

以上是关于如果用户名/电子邮件与特定域不匹配,则显示窗口警报的主要内容,如果未能解决你的问题,请参考以下文章

Outlook 使用规则未在系统托盘中显示新邮件警报

收件人域不匹配 Mailchimp

如果已经显示警报,则显示 UIAlertController

如果 UITableView 没有条目,则显示警报

如何使用 UIButton 停止特定功能?

jQuery - 如果仅匹配两个特定单词,则显示 div