2017-08-03 43 views
1

我目前在使用Firebase和Swift的應用程序中擁有用戶身份驗證3.是否有辦法讓用戶使用某個電子郵件地址註冊使用我的應用程序?您是否只允許具有特定電子郵件地址的用戶註冊並使用您的應用程序

+1

您可以在沒有安全規則的情況下在firebase中擁有一個節點,其中列出了可以在您的應用上進行身份驗證的所有電子郵件,然後在您註冊時首先驗證它是否爲有效電子郵件。 –

+0

也許你想問的問題是*蘋果是否會批准這樣的應用程序?*(我不知道答案。) – dfd

+0

這取決於你正在嘗試做什麼。 FireBase已經可以輕鬆配置Google,FaceBook和Twitter帳戶的身份驗證。如果您希望人們只使用某個電子郵件域,則應該由應用完成。例如,如果電子郵件在某個域中結束,那麼用戶只能在數據庫中註冊他們的電子郵件,然後像通常那樣進行身份驗證。 – Stefan

回答

1

基本上你想要做的是包含一個布爾測試來確定電子郵件文本是否包含你想要的域。

以下是確定輸入文本是否包含設定域的功能。

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

    let emailRegEx = "[A-Z0-9a-z._%+-][email protected][\(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 = "[email protected]" 

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") 
} 

另外我的例子,我會看看蘋果App Distribution Guide因爲如果要在本地發佈應用程式說僱員基地。

希望這會有所幫助。

+0

謝謝你的幫助,現在就測試! –

+0

這不能工作,如果你的用戶輸入[email protected],它仍然會註冊該電子郵件,你能否再次修復@Stefan –

0

你可以做以下的客戶端和後端檢查執行此:

  1. 在客戶端,你可以提供一個無效的電子郵件域時阻止登錄。如果您正在使用Google或Facebook等的一些聯合登錄功能,那麼如果電子郵件與您的域名不匹配,則可以返回該用戶的currentUser.emailcurrentUser.delete。如果您使用GSuite,Google還會提供一個'hd'參數來指定用戶域。
  2. 您可以使用Firebase函數onCreate事件在每次使用無效的電子郵件域創建一個用戶時快速刪除用戶。
  3. 如果您正在使用的數據庫的規則,可以阻止訪問,如果郵件不匹配: ".read": "auth != null && auth.uid == $uid" && auth.token.email.matches(/.*@mydomain.com$/)
  4. 如果您正在使用自己的後端,得到一個用戶的ID令牌時,驗證它,然後得到電子郵件並確保它與您的域名相匹配,如果沒有,您可以刪除該用戶。 Firebase Admin SDK提供了驗證ID令牌並通過UID刪除用戶的功能。
+0

謝謝,我更傾向於#3。 –

相關問題