您是否只允许具有特定电子邮件地址的用户注册并使用您的应用

时间:2017-08-03 21:38:41

标签: ios swift firebase firebase-authentication

我目前在我的应用中使用firebase和swift 3进行用户身份验证。有没有办法让只有某个电子邮件地址的用户注册才能使用我的应用?

2 个答案:

答案 0 :(得分:1)

基本上你想要做的是包括一个布尔测试,以确定电子邮件文本是否包含你想要的域。

这是一个确定输入文本是否包含设置域的函数。

func isValidEmail(testEmail:String, domain:String) -> Bool {

    let emailRegEx = "[A-Z0-9a-z._%+-]+@[\(domain)]+\\.[com]{3,\(domain.characters.count)}"
    let emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
    let result = emailTest.evaluate(with: testEmail)
    return result

}

以下是我使用它的一个例子

let customDomain = "mycompanyname"
let test = "frank@mycompanyname.com"

if isValidEmail(testEmail: test, domain: customDomain) == true {
    //Test succeedes... Here you would register the users as normal
    print("register \(test)")
}else{
    //Test fails... Here you might tell the user that their email doesn't check out
    print("register failed")
}

此外,如果您想在本地分发您的应用以表示员工群,我会看一下Apples App Distribution Guide

希望这有帮助。

答案 1 :(得分:0)

您可以执行以下客户端和后端检查以强制执行此操作:

  1. 在客户端,您可以在提供无效的电子邮件域时阻止登录。如果您使用某些联合登录Google或Facebook等,如果电子邮件与您的域名不匹配,您可以在返回时检查用户(defn style [s] (str/join ";" (map #(str (name %) ":" ((keyword %) s)) (keys s)))) (style {:padding "20px" :background "#e68a00" :color "white" :font-size "large" :font-weight "bold"}) currentUser.email。谷歌还提供了一个' hd'如果您使用的是GSuite,则指定用户域的参数。
  2. 每次使用无效的电子邮件域创建一个用户时,您都可以使用Firebase功能onCreate事件快速删除用户。
  3. 如果您使用的是数据库规则,则可以阻止访问,如果电子邮件不匹配: currentUser.delete
  4. 如果您使用自己的后端,在获取用户的ID令牌时进行验证,然后获取电子邮件并确保其与您的域匹配,否则,您可以删除该用户。 Firebase管理SDK可以验证ID令牌并通过UID删除用户。