如果用户名/电子邮件与特定域不匹配,则显示 window 警报
Show window alert if username / email doesn't match specific domains
如果电子邮件地址字段中的域与指定列表中的域不匹配,我想在 Auth0 通用锁上显示警报 window。 Auth0 规则仅 运行 一旦验证发生,我希望在此之前发生一些事情,所以我认为 window 警报可能是有用的。
我在适用于单个域的 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");
}
});
});
谢谢!
正则表达式乍一看似乎是正确的,但是 String.match
(因此也是函数 getDomain()
)不 return 只是一个字符串,而是一个包含更多内容的数组如果没有匹配项(例如根本不是有效的电子邮件地址),则有关匹配项(或 null
)的信息。数组的第一个元素包含匹配的字符串。 Docs
所以你必须首先检查 return 值是否不为空,然后取数组的第一个元素并检查你允许的域
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 ...");
}
如果电子邮件地址字段中的域与指定列表中的域不匹配,我想在 Auth0 通用锁上显示警报 window。 Auth0 规则仅 运行 一旦验证发生,我希望在此之前发生一些事情,所以我认为 window 警报可能是有用的。
我在适用于单个域的 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");
}
});
});
谢谢!
正则表达式乍一看似乎是正确的,但是 String.match
(因此也是函数 getDomain()
)不 return 只是一个字符串,而是一个包含更多内容的数组如果没有匹配项(例如根本不是有效的电子邮件地址),则有关匹配项(或 null
)的信息。数组的第一个元素包含匹配的字符串。 Docs
所以你必须首先检查 return 值是否不为空,然后取数组的第一个元素并检查你允许的域
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 ...");
}