guru_sdk/guru_app/lib/account/model/account.dart

109 lines
3.7 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import 'package:firebase_auth/firebase_auth.dart';
import 'package:guru_app/account/account_manager.dart';
import 'package:guru_app/account/model/account_profile.dart';
import 'package:guru_app/account/model/user.dart';
import 'package:guru_utils/auth/auth_credential_manager.dart';
import 'package:guru_utils/device/device_info.dart';
import 'package:guru_utils/property/app_property.dart';
/// Created by Haoyi on 6/3/21
class Account {
final GuruUser? guruUser;
final DeviceInfo? device;
final AccountProfile? accountProfile;
final User? firebaseUser;
final Map<AuthType, Credential> credentials; // facebook, google, apple, anonymous
@Deprecated("use guruUser instead")
SaasUser? get saasUser => guruUser;
String? get uid => guruUser?.uid;
String? get nickname => accountProfile?.nickname;
Account.restore(
{this.guruUser,
this.device,
this.accountProfile,
this.firebaseUser,
this.credentials = const {}});
}
class AccountAuth {
final GuruUser user;
final Credential? credential;
AccountAuth(this.user, {this.credential});
bool get isValid => uid != null && uid != "";
String? get saasToken => user.token;
String? get uid => user.uid;
// bool get existsFirebaseUser => firebaseUser != null;
@override
String toString() {
return 'AccountAuth{user: $user}';
}
}
class FirebaseAccountAuth {
final GuruUser user;
final User? firebaseUser;
FirebaseAccountAuth(this.user, {this.firebaseUser});
bool get isValid => uid != null && uid != "";
String? get guruToken => user.token;
String? get uid => user.uid;
bool get existsFirebaseUser => firebaseUser != null;
@override
String toString() {
return 'AccountAuth{user: $user}';
}
}
abstract class IAccountAuthDelegate {
/// 支持登陆的代理,这块不管返回不返回都会支持匿名登陆
List<AuthCredentialDelegate> get supportedAuthCredentialDelegates =>
AccountManager.defaultSupportedAuthCredentialDelegates;
/// 返回设备共享的用户属性,在帐号切换的时候会保证这些 KEY会保留下来
/// 注意,这里尽量不要把用户相关的属性设到这里面,否则会出现不必要的问题
Set<PropertyKey> get deviceSharedProperties => {};
/// 这个方法调用时,中台会确保当前的数据系统是切换后的数据系统
/// 因此可以放心使用模板的数据,当 processor 返回后,对应的数据系统将会被切换
/// 因此确保 processor 返回后,数据系统已经切换到新用户的数据系统
Future<bool> onLogin(GuruUser loginUser, Credential credential);
/// 这个方法调用时,中台会确保当前的数据系统是切换前的数据系统
/// 因此可以放心使用模板的数据,当 processor返回后对应的数据系统将会被切换
/// 因此确保 processor 返回前,数据系统已经完成老用户数据的迁移
Future<bool> onLogout(GuruUser logoutUser);
/// 当出现登陆冲突时,有可能当前是匿名帐号,而这时,中台模板会静默登入到新的帐号中
/// 与此同时,中台会调用 onAnonymousLogout
Future<bool> onAnonymousLogout(GuruUser logoutUser) async {
return true;
}
/// 当 APP首次匿名登陆时或当登陆一个没有绑定匿名Credential的帐号时会在登出时重新登陆一个新的匿名帐号
/// 中台在这种情况下会调用 onAnonymousLogin
Future<bool> onAnonymousLogin(GuruUser loginUser, Credential credential) async {
return true;
}
/// 当登陆时,有可能会出现帐号冲突,因此针对冲突可以选择切换帐号或者忽略
/// 如果你选择切换帐号,那么你需要提供 onLogout 方法,用于处理老用户的数据迁移
/// 返回值为是否继续
Future<bool> onConflict();
}