Проверка электронной почты Firebase не работает с ActionCodeSetting

Я пытаюсь реализовать проверку электронной почты пользователя (с URL-адресом проверки по умолчанию в шаблоне электронной почты) И URL-адресом ActionCodeSetting (динамическая ссылка), чтобы вернуть пользователя в приложение. Я сбит с толку тем, как должна работать проверка электронной почты Firebase с помощью ActionCodeSetting. Я прочитал все доступные страницы документации, и мне до сих пор неясно, как правильно настроить «URL продолжения», чтобы НЕ вытеснять и отменять URL проверки по умолчанию.

Что я наделал:

  1. Я протестировал проверку электронной почты с помощью автоматически созданной ссылки для проверки электронной почты. Это сработало.
  2. Затем я добавил URL-адрес ActionCodeSetting, который использует домен, добавленный в связанные домены проекта XCode. Это помогло вернуть пользователя в приложение после нажатия ссылки для подтверждения.
  3. Проблема: проверка адреса электронной почты больше не работает.

Вот реализованный мной код:

var actionCodeSettings = ActionCodeSettings.init()
                actionCodeSettings.handleCodeInApp = true
                let user = Auth.auth().currentUser
                let urlString = "https://blaproject.page.link/zCB4"
                actionCodeSettings.setIOSBundleID(Bundle.main.bundleIdentifier!)
                actionCodeSettings.setAndroidPackageName("com.example.android", installIfNotAvailable:true, minimumVersion:"12")

                Auth.auth().currentUser?.sendEmailVerification(with: actionCodeSettings, completion: { (error) in
                    print("verification email sent")
                    print("action code setting URL is: \(String(describing: actionCodeSettings.url))")
                })

Вот URL-адрес подтверждения по умолчанию из шаблона электронной почты в консоли Firebase:

https://blaproject-ea9d6.firebaseapp.com/__/auth/action?mode= & oobCode =

И вот URL-адрес подтверждения, который отправляется приведенным выше кодом:

https://blaproject.page.link?link= https://blaproject-ea9d6.firebaseapp.com//auth/action?apiKey%3DAIzaSyAi1fxd-HdkfXzYJxTpwmB3_mVCy5gvWxA%26mode%3DverifyEmail%26oobCode%3DqjvGoqc1n3ya0OIi_tWIYTpp59DYKgB6Sbj0EymN2IkAAAFkYNutMA%26continueUrl%3Dhttps://blaproject.page.link/zCE4%26lang% 3Den & apn = com.example.android & amv = 12 & ibi = blaproject.blaprojectV0-2 & МСЧ = HTTPS: //blaproject-ea9d6.firebaseapp.com/ /auth/action?apiKey%3DAIzaSyAi1fxd-HdkfXzYJxTpwmB3_mVCy5gvWxA%26mode%3DverifyEmail%26oobCode%3DqjvGoqc1n3ya0OIi_tWIYTpp59DYKgB6Sbj0EymN2IkAAAFkYNutMA%26continueUrl%3Dhttps://blaproject.page.link/zCE4 % 26lang% 3Den

Итак, мой вопрос: почему этот URL-адрес не проверяет электронную почту пользователя, а затем использует URL-адрес продолжения (и связанный домен), чтобы запустить приложение? Он только запускает открытие приложения без проверки электронной почты пользователя.

Спасибо за любые советы, которые вы можете дать, чтобы помочь мне понять, чего я не понимаю :)


person lucius degeer    schedule 04.07.2018    source источник


Ответы (1)


Когда ссылка запускает ваше приложение для открытия. Вам нужно разобрать oobCode из глубинной ссылки. Вы можете использовать клиентскую библиотеку FDL, чтобы получить глубокую ссылку. См. Следующую документацию о формате глубинной ссылки и о том, как разобрать код: https://firebase.google.com/docs/auth/custom-email-handler

Получив код, вам нужно применить его с помощью auth.applyActionCode(code) API. Это подтвердит электронную почту.

После проверки вы можете вызвать user.reload(), чтобы обновить свойство emailVerified для пользователя. Вы также можете принудительно user.getIdToken(true) обновить токен с помощью обновленного подтвержденного адреса электронной почты, если вы используете правило безопасности Firebase.

person bojeil    schedule 05.07.2018
comment
Большое спасибо за разъяснение потока. Попробую это! - person lucius degeer; 06.07.2018
comment
Всем привет. У вас есть контактная информация? Хотел бы поделиться подробностями о работе консультанта. - person Crashalot; 02.02.2021