iOS 에서도 LINE 앱 자동 로그인을 꺼 웹 로그인이 끊기지 않게 함
This commit is contained in:
@@ -68,9 +68,12 @@ class AuthRepository extends ChangeNotifier {
|
|||||||
AuthProviderKind.line,
|
AuthProviderKind.line,
|
||||||
providerId: FirebaseAccountLinker.providerIds[AuthProviderKind.line]!,
|
providerId: FirebaseAccountLinker.providerIds[AuthProviderKind.line]!,
|
||||||
scopes: const ['profile', 'email'],
|
scopes: const ['profile', 'email'],
|
||||||
// LINE 앱 자동 로그인으로 넘어가면 콜백이 Custom Tab 밖에서 열려 로그인이
|
// LINE 앱 자동 로그인으로 넘어가면 콜백이 웹 로그인 창 밖에서 열려 로그인이
|
||||||
// 깨진다(Android). LINE Login 공식 파라미터로 끈다.
|
// 깨진다(Android · iOS). LINE Login 공식 파라미터로 끈다.
|
||||||
androidParameters: const {'disable_auto_login': 'true'},
|
appParameters: const {
|
||||||
|
'disable_auto_login': 'true',
|
||||||
|
'disable_ios_auto_login': 'true',
|
||||||
|
},
|
||||||
),
|
),
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
@@ -224,7 +224,7 @@ final class OidcSignInProvider implements SocialAuthProvider {
|
|||||||
this.provider, {
|
this.provider, {
|
||||||
required this.providerId,
|
required this.providerId,
|
||||||
this.scopes = const [],
|
this.scopes = const [],
|
||||||
this.androidParameters = const {},
|
this.appParameters = const {},
|
||||||
this.firebaseAuth,
|
this.firebaseAuth,
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -239,11 +239,11 @@ final class OidcSignInProvider implements SocialAuthProvider {
|
|||||||
/// KOE205 로 로그인 자체를 막는다.
|
/// KOE205 로 로그인 자체를 막는다.
|
||||||
final List<String> scopes;
|
final List<String> scopes;
|
||||||
|
|
||||||
/// Android 에서만 인가 URL 에 붙일 파라미터. Android Custom Tab 은 다른 앱으로
|
/// 앱(Android · iOS)에서 인가 URL 에 붙일 파라미터. 웹 로그인 도중 제공자 앱(LINE 등)으로
|
||||||
/// 넘어갔다 돌아오면 콜백이 일반 Chrome 탭에서 열려 Firebase 핸들러가
|
/// 넘어갔다 돌아오면 콜백이 원래 브라우저 세션 밖에서 열려 Firebase 핸들러가
|
||||||
/// 「missing initial state」로 끝난다 — 앱 전환을 막는 공식 파라미터를 여기 둔다.
|
/// 「missing initial state」로 끝난다(Android 10/5 · iOS 10/11 실기기) — 앱 전환을 막는
|
||||||
/// iOS 는 정상이라 건드리지 않는다.
|
/// 제공자 공식 파라미터를 여기 둔다.
|
||||||
final Map<String, String> androidParameters;
|
final Map<String, String> appParameters;
|
||||||
|
|
||||||
/// 테스트 주입용. 기본은 [fb.FirebaseAuth.instance].
|
/// 테스트 주입용. 기본은 [fb.FirebaseAuth.instance].
|
||||||
final fb.FirebaseAuth? firebaseAuth;
|
final fb.FirebaseAuth? firebaseAuth;
|
||||||
@@ -260,9 +260,7 @@ final class OidcSignInProvider implements SocialAuthProvider {
|
|||||||
for (final scope in scopes) {
|
for (final scope in scopes) {
|
||||||
p.addScope(scope);
|
p.addScope(scope);
|
||||||
}
|
}
|
||||||
if (!kIsWeb && defaultTargetPlatform == TargetPlatform.android) {
|
if (!kIsWeb) p.setCustomParameters(appParameters);
|
||||||
p.setCustomParameters(androidParameters);
|
|
||||||
}
|
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -87,16 +87,22 @@ void main() {
|
|||||||
expect((outcome as AuthFailed).code, 'E-AUTH-11');
|
expect((outcome as AuthFailed).code, 'E-AUTH-11');
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Android 의 LINE 은 앱 자동 로그인을 끈다 · iOS 는 파라미터 없음', () {
|
test('LINE 은 Android · iOS 모두 앱 자동 로그인을 끈다', () {
|
||||||
final line =
|
final line =
|
||||||
AuthRepository().providers.firstWhere(
|
AuthRepository().providers.firstWhere(
|
||||||
(p) => p.provider == AuthProviderKind.line,
|
(p) => p.provider == AuthProviderKind.line,
|
||||||
)
|
)
|
||||||
as OidcSignInProvider;
|
as OidcSignInProvider;
|
||||||
expect(line.authProvider.parameters, {'disable_auto_login': 'true'});
|
expect(line.authProvider.parameters, {
|
||||||
|
'disable_auto_login': 'true',
|
||||||
|
'disable_ios_auto_login': 'true',
|
||||||
|
});
|
||||||
debugDefaultTargetPlatformOverride = TargetPlatform.iOS;
|
debugDefaultTargetPlatformOverride = TargetPlatform.iOS;
|
||||||
addTearDown(() => debugDefaultTargetPlatformOverride = null);
|
addTearDown(() => debugDefaultTargetPlatformOverride = null);
|
||||||
expect(line.authProvider.parameters, isEmpty);
|
expect(line.authProvider.parameters, {
|
||||||
|
'disable_auto_login': 'true',
|
||||||
|
'disable_ios_auto_login': 'true',
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
testWidgets('Android: 앱으로 돌아왔는데 결과가 없으면 취소로 풀린다', (tester) async {
|
testWidgets('Android: 앱으로 돌아왔는데 결과가 없으면 취소로 풀린다', (tester) async {
|
||||||
|
|||||||
Reference in New Issue
Block a user