firebase / flutterfire

🔥 A collection of Firebase plugins for Flutter apps.
https://firebase.google.com/docs/flutter/setup
BSD 3-Clause "New" or "Revised" License
8.71k stars 3.97k forks source link

[FIREBASE_AUTH] Apple Sign in with firebase #2048

Closed dheerajsarwaiya closed 4 years ago

dheerajsarwaiya commented 4 years ago

Is your feature request related to a problem? Please describe. Apple do not approve IOS app without sign in with apple option. I use firebase auth for google sign in. But i dont see any option for Apple Sign in. Right now i am using git "https://github.com/zariweyo/flutterfire.git". But this git is getting old and I am unable to use any of your latest updates because that still do not support apple sign in.

Describe the solution you'd like The best solution should be the same as Google Sign In. If not then whatever is available in the above git. Please merge the same to your latest update.

Additional context firebase_auth: git: url: https://github.com/zariweyo/flutterfire.git path: packages/firebase_auth/firebase_auth ref: develop

awhitford commented 4 years ago

Go to your Firebase Console, open your Project, choose Authentication, and click on the Sign-in method tab. You need to enable the Apple provider.

Navil commented 4 years ago

Go to your Firebase Console, open your Project, choose Authentication, and click on the Sign-in method tab. You need to enable the Apple provider.

Flutter does however not provide a frontend solution to sign in with Apple credentials.

cbenhagen commented 4 years ago

@dheerajsarwaiya the changes in the repo you mentioned were merged with https://github.com/FirebaseExtended/flutterfire/pull/1526.

addie9000 commented 4 years ago

Seems to lack of capability to handle linkWithCredential. Because Sign in with Apple does not permit to use the same credential twice, we need to get new credential if 'ERROR_CREDENTIAL_ALREADY_IN_USE' occured when linkWithCredential, by using error.userInfo[FIRAuthErrorUserInfoUpdatedCredentialKey]. Otherwise stuck with 'ERROR_MISSING_OR_INVALID_NONCE' error. However I can't find the way to get error.userInfo[FIRAuthErrorUserInfoUpdatedCredentialKey].

Ref: https://github.com/firebase/firebase-ios-sdk/issues/4434#issuecomment-564776016

This problem is originaly mentioned #2253

xster commented 4 years ago

The package readme also needs documentation updates for the iOS section to specifically mention the steps needed to enable Apple as a provider for firebase auth.

addie9000 commented 4 years ago

@Salakar I believe there is not only documentation issue but also lack of feature. The label should be type:missing-feature.

Or should we re-open #2253 and treat https://github.com/FirebaseExtended/flutterfire/issues/2048#issuecomment-611349941 as specific issue other than general 'Apple Sign in with firebase' issue?

Salakar commented 4 years ago

@addie9000 it was my understanding that this is already possible using the apple_signin_plugin along with the OAuth provider - https://github.com/FirebaseExtended/flutterfire/blob/master/packages/firebase_auth/firebase_auth/lib/src/auth_provider/oauth_auth_provider.dart

Is this not the case?

Documentation label added for the purpose of documenting an example of integrating the two.

addie9000 commented 4 years ago

@Salakar Partially yes. However linkWithCredential does not work with existing user as mentioned #2253 and my comment. And more specific issue #2253 is closed and suggested to discuss about the issue here.

Salakar commented 4 years ago

@addie9000 ah ok that makes more sense - am I right in assuming then that it's just the information on the error (specifically the FIRAuthErrorUserInfoUpdatedCredentialKey data) that needs exposing to Dart?

We're tracking all these 'error' issues on #1456 - we'll be looking at parsing native error messages & codes and bubbling these up to the Dart layer in a consistent cross-platform format, including associated error information such as this one.

addie9000 commented 4 years ago

@Salakar Yes, indeed. I've just found that issue and thought to link here. Now it's clear that we can discuss about this topic on #1456 if needed. The remaining of this issue for me is only documentation as you said.

Thank you!

Salakar commented 4 years ago

@Salakar Yes, indeed. I've just found that issue and thought to link here. Now it's clear that we can discuss about this topic on #1456 if needed. The remaining of this issue for me is only documentation as you said.

Thank you!

Great, thanks for helping clarify 😅 we'll keep both issues open as they tracking separate things.

xster commented 4 years ago

@Salakar I think it would be good to address this documentation part sooner rather than later to give users a bit of time before the June 30th deadline to adjust their own code to support an Apple sign in frontend.

FWIW, https://pub.dev/packages/sign_in_with_apple was included in the Flutter Favorite list and I suspect their maintainers would be happy to work with you if any adjustments needed to be made.

tecbot commented 4 years ago

We have fixed this issue by our own with the following change: https://github.com/brancedev/flutterfire/commit/66c8aa6ec73d49e6f6e04514edf263ad986ea34a

First we have tried to expose the updated credentials to flutter but the issue was that not all of the internal fields are exposed (e.g. rawNonce) from the internal auth sdk. So we have just added this directly to the linkWithCredential flow and it have worked :)

DavidCorrado commented 4 years ago

I have a question on integration with a third party plugin for Android. I have found one that supports android which is the plugin you reference above which is https://pub.dev/packages/sign_in_with_apple. Issue is their solution requires you to use your own server to handle the redirection like this https://github.com/aboutyou/dart_packages/issues/91#issuecomment-642380267 rather than the firebase way which is using a URL like https://PROJECT_ID.firebaseapp.com/__/auth/handler Is there any docs on how for third party SDKs to interact with the firebase auth handler URL or is that just for the firebase SDK. So if its not possible for third party SDKs to interact with the firebase auth handler then it sounds like the only reasonable solutions per here is one of these solutions: https://firebase.google.com/docs/auth/android/apple 1) Have a flutter plugin that uses the firebase sdk in Android and communicate that to flutter 2) Use OpenAuth or some other open auth sdk in Android and communicate that to flutter.(I dont see any solutions online which show an example of this on Android.)

Can you confirm?

red42 commented 4 years ago

firebase_auth_oauth does exactly that. It uses the Firebase SDK to perform OAuth authentication on Android devices and the native Apple Sign In flow on iOS 13+ devices. It also works with other OAuth providers.

Usage couldn't be simpler:

// Sign-in by Apple example

FirebaseUser user = await FirebaseAuthOAuth()
          .openSignInFlow("apple.com", ["email"], {"locale": "en"});

Just be aware that at this time, the scope for the user's name is fullName on iOS and name on Android.

cpboyd commented 4 years ago

firebase_auth_oauth, however, increases the minimum deployment target (granted, just from iOS 8 to iOS 9 but it's still higher than Flutter's default).

Seeing as it's now July (and thus past the June 30 deadline that @xster mentioned), it'd be nice to have an officially sanctioned way to do this with Flutter.

@DavidCorrado note that sign_in_with_apple.dart#L81 states webAuthenticationOptions is only required on Android.

Presumably, if you're only concerned about Apple's App Store requirements, sign_in_with_apple should work for iOS and macOS apps.

Salakar commented 4 years ago

Hey 👋

Our rework of the firebase_auth plugin as part of the FlutterFire roadmap was published over a week ago with a ton of fixes and new features. Please could you try the new version and see if this is still an issue on the latest version? If it is then please submit a new up to date GitHub issue. Support for the FIRAuthErrorUserInfoUpdatedCredentialKey was added, and also docs!

See: https://firebase.flutter.dev/docs/auth/error-handling

For help migrating to the new plugins please see the new migration guide: https://firebase.flutter.dev/docs/migration

CharlesCCC commented 4 years ago

@Salakar How does FIRAuthErrorUserInfoUpdatedCredentialKey get supported ? I can't find it anywhere from the doc you provided.