我们正在做一个Flutter项目,我们希望通过Windows Azure Oauth2身份验证来访问数据,这应该可以在所有主要平台上工作(至少在大多数平台上)。关键的平台是android,ios和web,但也最好是windows-native,linux,fuchsia等等。
主要的问题是,我们还没有找到任何支持web平台(edge,chrome,safari +++)的flutter库。
我们看到许多(通常是更老的)帖子说web方法还不可用。
有没有支持所有的库,有没有人有一个例子(在github上对Azure的完整的“开箱即用”(?)即)有没有人知道,这是最近才推出的?
发布于 2021-10-18 12:16:48
你可以在网页上使用msal_js包,在ios和android上使用aad_oauth包。
要将这些组合到一个多平台项目中,您需要亲自动手。
一种可能的解决方案是:
在你的项目中创建4个文件: auth_manager_stub.dart,iAuth_manager.dart,auth_manager_native.dart,auth_manager_web.dart。
//auth_manager_stub.dart
import 'auth_manager.dart';
AuthManager getManager() =>
throw UnsupportedError('Cannot create an auth manager');我们的接口文件。
import 'auth0_manager_stub.dart'
if (dart.library.io) 'package:aad_oauth/aad_oauth.dart'
if (dart.library.js) 'package:msal_js/msal_js.dart';
abstract class AuthManager {
static AuthManager? _instance;
static AuthManager? get instance {
_instance ??= getManager();
return _instance;
}
Future<User> login();
}我们的auth_manager_native.dart文件将如下所示:
import 'package:aad_oauth/aad_oauth.dart';
import 'package:aad_oauth/model/config.dart';
import 'iAuth_manager.dart';
//other imports
AuthManager getManager() => Auth0Manager();
class Auth0Manager extends AuthManager {
String? accessToken;
@override
Future<void> Login() async {
//some native code....
}
}我们的web.dart文件如下所示:
import 'package:msal_js/msal_js.dart';
import 'auth_manager.dart';
import 'dart:js' as js;
import 'iAuth_manager.dart';
AuthManager getManager() => Auth0ManagerForWeb();
class Auth0ManagerForWeb extends AuthManager {
@override
Future<String> Login() async {
//web-specific code here
}
}只需在特定于平台的文件中为每个平台实现不同的登录方法。
在我们的main.dart文件中,我们可以这样做:
void login() async {
AuthManager.instance?.Login();
}我们将根据我们使用的设备来调用特定的策略。各个库的用法以及我们如何实现它们超出了这个问题的范围。
https://stackoverflow.com/questions/69496271
复制相似问题