Skip to content

Commit

Permalink
fix(ui): fix sign out issue on desktop and web (#8331)
Browse files Browse the repository at this point in the history
  • Loading branch information
lesnitsky committed Mar 24, 2022
1 parent 982bdfb commit f1dae73
Show file tree
Hide file tree
Showing 7 changed files with 56 additions and 24 deletions.
Expand Up @@ -67,6 +67,7 @@ abstract class OAuthProvider {
return credential;
}

Future<void> logOutProvider();
Future<void> signOut() async {}
}

Expand Down
Expand Up @@ -72,6 +72,11 @@ class AppleProviderImpl extends AppleProvider {

@override
dynamic get firebaseAuthProvider => null;

@override
Future<void> logOutProvider() {
return SynchronousFuture(null);
}
}

class AppleProviderConfiguration
Expand Down
Expand Up @@ -8,14 +8,16 @@ import 'package:desktop_webview_auth/facebook.dart';
import 'package:flutterfire_ui/auth.dart';

import '../../widgets/internal/oauth_provider_button_style.dart';
import '../../oauth/provider_resolvers.dart';
import '../provider_resolvers.dart';
import '../../auth_flow.dart';
import '../oauth_providers.dart';

import 'sign_out_mixin.dart' if (dart.library.html) 'sign_out_mixin_web.dart';

abstract class FacebookProvider extends OAuthProvider {}

class FacebookProviderImpl extends FacebookProvider {
final _provider = FacebookAuth.instance;
class FacebookProviderImpl extends FacebookProvider with SignOutMixin {
final provider = FacebookAuth.instance;
final String clientId;
final String redirectUri;

Expand All @@ -32,7 +34,7 @@ class FacebookProviderImpl extends FacebookProvider {

@override
Future<OAuthCredential> signIn() async {
final result = await _provider.login();
final result = await provider.login();

switch (result.status) {
case LoginStatus.success:
Expand All @@ -49,18 +51,18 @@ class FacebookProviderImpl extends FacebookProvider {
}
}

@override
Future<void> signOut() async {
await _provider.logOut();
}

@override
OAuthCredential fromDesktopAuthResult(AuthResult result) {
return FacebookAuthProvider.credential(result.accessToken!);
}

@override
FacebookAuthProvider get firebaseAuthProvider => FacebookAuthProvider();

@override
Future<void> logOutProvider() async {
await provider.logOut();
}
}

class FacebookProviderConfiguration
Expand All @@ -73,7 +75,7 @@ class FacebookProviderConfiguration
this.redirectUri,
});

FacebookProvider get _provider => FacebookProviderImpl(
FacebookProvider get provider => FacebookProviderImpl(
clientId: clientId,
redirectUri: redirectUri ?? defaultRedirectUri,
);
Expand All @@ -83,7 +85,7 @@ class FacebookProviderConfiguration

@override
FacebookProvider createProvider() {
return _provider;
return provider;
}

@override
Expand Down
Expand Up @@ -13,17 +13,19 @@ import '../../widgets/internal/oauth_provider_button_style.dart';
import '../oauth_providers.dart';
import '../provider_resolvers.dart';

import 'sign_out_mixin.dart' if (dart.library.html) 'sign_out_mixin_web.dart';

const _firebaseAuthProviderParameters = {
'prompt': 'select_account',
};

abstract class GoogleProvider extends OAuthProvider {}

class GoogleProviderImpl extends GoogleProvider {
class GoogleProviderImpl extends GoogleProvider with SignOutMixin {
String clientId;
String redirectUri;

final _provider = GoogleSignIn();
late final provider = GoogleSignIn(clientId: clientId);

@override
final GoogleAuthProvider firebaseAuthProvider = GoogleAuthProvider();
Expand All @@ -43,7 +45,7 @@ class GoogleProviderImpl extends GoogleProvider {

@override
Future<OAuthCredential> signIn() async {
final user = await _provider.signIn();
final user = await provider.signIn();

if (user == null) {
throw AuthCancelledException();
Expand All @@ -59,19 +61,18 @@ class GoogleProviderImpl extends GoogleProvider {
return credential;
}

@override
Future<void> signOut() async {
await _provider.signOut();
await super.signOut();
}

@override
OAuthCredential fromDesktopAuthResult(AuthResult result) {
return GoogleAuthProvider.credential(
idToken: result.idToken,
accessToken: result.accessToken,
);
}

@override
Future<void> logOutProvider() async {
await provider.signOut();
}
}

class GoogleProviderConfiguration
Expand Down
@@ -0,0 +1,13 @@
import 'dart:io';

import '../oauth_providers.dart';

mixin SignOutMixin on OAuthProvider {
@override
Future<void> signOut() async {
if (Platform.isAndroid || Platform.isIOS) {
await logOutProvider();
}
return super.signOut();
}
}
@@ -0,0 +1,3 @@
import '../oauth_providers.dart';

mixin SignOutMixin on OAuthProvider {}
Expand Up @@ -6,15 +6,17 @@ import 'package:flutter/foundation.dart';
import 'package:twitter_login/twitter_login.dart';

import 'package:flutterfire_ui/auth.dart';
import '../../oauth/provider_resolvers.dart';
import '../provider_resolvers.dart';
import '../../widgets/internal/oauth_provider_button_style.dart';

import '../../auth_flow.dart';
import '../oauth_providers.dart';

import 'sign_out_mixin.dart' if (dart.library.html) 'sign_out_mixin_web.dart';

abstract class TwitterProvider extends OAuthProvider {}

class TwitterProviderImpl extends TwitterProvider {
class TwitterProviderImpl extends TwitterProvider with SignOutMixin {
final String apiKey;
final String apiSecretKey;
final String redirectUri;
Expand All @@ -26,7 +28,7 @@ class TwitterProviderImpl extends TwitterProvider {
redirectUri: redirectUri,
);

late final _provider = TwitterLogin(
late final provider = TwitterLogin(
apiKey: apiKey,
apiSecretKey: apiSecretKey,
redirectURI: redirectUri,
Expand All @@ -40,7 +42,7 @@ class TwitterProviderImpl extends TwitterProvider {

@override
Future<OAuthCredential> signIn() async {
final result = await _provider.login();
final result = await provider.login();

switch (result.status) {
case null:
Expand All @@ -67,6 +69,11 @@ class TwitterProviderImpl extends TwitterProvider {

@override
TwitterAuthProvider get firebaseAuthProvider => TwitterAuthProvider();

@override
Future<void> logOutProvider() {
return SynchronousFuture(null);
}
}

class TwitterProviderConfiguration
Expand Down

0 comments on commit f1dae73

Please sign in to comment.