#firebase #flutter #firebase-authentication
#firebase #flutter #firebase-аутентификация
Вопрос:
Когда я нажимаю на ссылку подтверждения из своего электронного письма, открывается мое приложение, работающее в фоновом режиме, но метод didChangeAppLifecycleState возвращает данные как null и deepLink, установленные в firebase, вместо полной ссылки на электронную почту из моего электронного письма, в результате чего ошибка SignInWithEmailAndLink не выполняется, поскольку предполагается, что он соответствует адресу электронной почты, введенному в виджете по полученной ссылке.
Вот код, взятый из этой статьи https://medium.com/firebase-developers/dive-into-firebase-auth-on-flutter-email-and-link-sign-in-e51603eb08f8 :-
1.Метод didChangeAppLifecycleState
@override
void didChangeAppLifecycleState(AppLifecycleState state) async {
if (state == AppLifecycleState.resumed) {
final PendingDynamicLinkData data =
await FirebaseDynamicLinks.instance.getInitialLink();
if( data?.link != null ) {
handleLink(data?.link);
}
FirebaseDynamicLinks.instance.onLink(
onSuccess: (PendingDynamicLinkData dynamicLink) async {
final Uri deepLink `enter code here`= dynamicLink?.link;
handleLink(deepLink);
}, onError: (OnLinkErrorException e) async {
print('onLinkError');
print(e.message);
});
}
}
- Метод handleLink
void handleLink(Uri link) async {
if (link != null) {
final User user = (await _auth.signInWithEmailAndLink(
email: _userEmail,
link: link.toString(),
))
.user;
if (user != null) {
setState(() {
_userID = user.uid;
_success = true;
});
} else {
setState(() {
_success = false;
});
}
} else {
setState(() {
_success = false;
});
}
setState(() {});
}
- основной метод (инициализация firebase)
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(MyApp());
}
Примечание: — Deeplink — это концепция, все еще новая для меня во flutter, поэтому я установил ее случайным образом в firebase. На моей странице регистрации есть WidgetsBindingObserver, который помогает возобновить состояние жизненного цикла приложения. Мой код регистрации и входа находится в виджете электронной почты, и я не использую формы для проверки моих текстовых полей.
Ответ №1:
кажется, что после входа по ссылке электронной почты экземпляр firebase не обновлялся до проверки подлинности.SigninWithEMailLink() вам нужно обновить его в экземпляре firebase следующим образом
var user= await auth.currentUser();
await user.reload();
user=await auth.currentUser();
если вы все еще сталкиваетесь с проблемой, пожалуйста, предоставьте еще немного кода, чтобы я правильно понял вашу проблему
Комментарии:
1. Насколько я понимаю, я не могу получить CurrentUser, пока пользователь не зарегистрируется при регистрации (я также не вижу пользователя в firebase). Я предоставил код с более подробной информацией, дайте мне знать, если вы хотите узнать что-нибудь еще.