linkWithCredential 和 Flutter Web with Apple
linkWithCredential and Flutter Web with Apple
我有一个用例,在 Flutter Web 上,用户需要 link 使用其现有帐户进行 Apple 身份验证,但电子邮件可能不匹配。
但是,Flutter Web Apple 身份验证唯一可用的方法是 signInWithPopUp
。如果用户的苹果电子邮件与用户 firebase 帐户电子邮件不同,则会创建一个新的 firebase 帐户,并返回一个用户,从而缩短 linking 的过程,这会在 firebase 中创建一个新帐户,我'我无法 linkWithCredential
.
我尝试link个账户的方法如下:
Future<String> linkWithAppleWeb() async {
try {
final User user = _auth.currentUser!;
final provider = OAuthProvider("apple.com")
..addScope('email')
..addScope('name');
await _auth.signInWithPopup(provider).then((appleCredential) async {
final authCredential = appleCredential.credential;
await user.linkWithCredential(authCredential!).then((result) {
DatabaseService().updateUserSocialAuth(user.uid, 'apple');
return 'Success';
}).catchError((e) {
return 'Error: $e';
});
});
} catch (e) {
return 'Error: $e';
}
return 'Success';
}
如您所料,我的项目从流式传输用户对象开始,and when the pop up signs in, it returns the new user,它重建了整个项目。有没有办法在不返回新用户的情况下对苹果用户进行身份验证?我可以 link google 或 phone 授权方法。有问题的是苹果。我不完全理解为什么 Google 不会以同样的方式中断,除了 Firebase 投入工作以确保 linking 的功能用于 GoogleSignIn().signIn()
我没有使用其他社交身份验证方法,我不使用 password/email.
此方法未记录在 Flutter Fire Docs 中,但效果很好:
Future<String> linkWithAppleWeb() async {
try {
final User user = _auth.currentUser!;
final provider = OAuthProvider("apple.com")
..addScope('email')
..addScope('name');
await user.linkWithPopup(provider).then((result) {
DatabaseService().updateUserSocialAuth(user.uid, 'apple');
return 'Success';
}).catchError((e) {
return 'Error: $e';
});
} catch (e) {
debugPrint('auth linkWithGoogle error: ${e.toString()}');
return 'Error: $e';
}
return 'Success';
}
我有一个用例,在 Flutter Web 上,用户需要 link 使用其现有帐户进行 Apple 身份验证,但电子邮件可能不匹配。
但是,Flutter Web Apple 身份验证唯一可用的方法是 signInWithPopUp
。如果用户的苹果电子邮件与用户 firebase 帐户电子邮件不同,则会创建一个新的 firebase 帐户,并返回一个用户,从而缩短 linking 的过程,这会在 firebase 中创建一个新帐户,我'我无法 linkWithCredential
.
我尝试link个账户的方法如下:
Future<String> linkWithAppleWeb() async {
try {
final User user = _auth.currentUser!;
final provider = OAuthProvider("apple.com")
..addScope('email')
..addScope('name');
await _auth.signInWithPopup(provider).then((appleCredential) async {
final authCredential = appleCredential.credential;
await user.linkWithCredential(authCredential!).then((result) {
DatabaseService().updateUserSocialAuth(user.uid, 'apple');
return 'Success';
}).catchError((e) {
return 'Error: $e';
});
});
} catch (e) {
return 'Error: $e';
}
return 'Success';
}
如您所料,我的项目从流式传输用户对象开始,and when the pop up signs in, it returns the new user,它重建了整个项目。有没有办法在不返回新用户的情况下对苹果用户进行身份验证?我可以 link google 或 phone 授权方法。有问题的是苹果。我不完全理解为什么 Google 不会以同样的方式中断,除了 Firebase 投入工作以确保 linking 的功能用于 GoogleSignIn().signIn()
我没有使用其他社交身份验证方法,我不使用 password/email.
此方法未记录在 Flutter Fire Docs 中,但效果很好:
Future<String> linkWithAppleWeb() async {
try {
final User user = _auth.currentUser!;
final provider = OAuthProvider("apple.com")
..addScope('email')
..addScope('name');
await user.linkWithPopup(provider).then((result) {
DatabaseService().updateUserSocialAuth(user.uid, 'apple');
return 'Success';
}).catchError((e) {
return 'Error: $e';
});
} catch (e) {
debugPrint('auth linkWithGoogle error: ${e.toString()}');
return 'Error: $e';
}
return 'Success';
}