首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有multiplatform oauth2登录的Flutter应用程序多平台应用程序

带有multiplatform oauth2登录的Flutter应用程序多平台应用程序
EN

Stack Overflow用户
提问于 2021-10-08 13:02:08
回答 1查看 113关注 0票数 1

我们正在做一个Flutter项目,我们希望通过Windows Azure Oauth2身份验证来访问数据,这应该可以在所有主要平台上工作(至少在大多数平台上)。关键的平台是android,ios和web,但也最好是windows-native,linux,fuchsia等等。

主要的问题是,我们还没有找到任何支持web平台(edge,chrome,safari +++)的flutter库。

我们看到许多(通常是更老的)帖子说web方法还不可用。

有没有支持所有的库,有没有人有一个例子(在github上对Azure的完整的“开箱即用”(?)即)有没有人知道,这是最近才推出的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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。

代码语言:javascript
复制
   //auth_manager_stub.dart
   import 'auth_manager.dart';

   AuthManager getManager() =>
    throw UnsupportedError('Cannot create an auth manager');

我们的接口文件。

代码语言:javascript
复制
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文件将如下所示:

代码语言:javascript
复制
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文件如下所示:

代码语言:javascript
复制
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文件中,我们可以这样做:

代码语言:javascript
复制
void login() async {
   AuthManager.instance?.Login();
}

我们将根据我们使用的设备来调用特定的策略。各个库的用法以及我们如何实现它们超出了这个问题的范围。

归功于this medium articlethis

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69496271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档