Flutter app:如何实现正确的注销功能?

Posted

技术标签:

【中文标题】Flutter app:如何实现正确的注销功能?【英文标题】:Flutter app: How to implement a proper logout function? 【发布时间】:2020-06-27 17:36:04 【问题描述】:

我有一个使用 Azure B2C 身份验证的颤振应用程序。为了实现这一点,我使用了颤振的 appAuth 包。登录过程正常,但 appAuth 不提供注销功能。登录后,我得到一个访问令牌。到目前为止,我的注销是删除此访问令牌。

问题是,Azure 要求登录用户流中的 Web 应用会话生命周期至少为 15 分钟。这意味着:如果用户在 15 分钟内登录和退出,他将自动重新登录。这使得其他用户无法登录。

我希望通过真正的注销来解决此问题,而不是仅删除访问令牌。在Azure Active Directory documentation 中找到以下代码行。但我无法让它运行。对注销功能有什么建议吗?

GET https://tenant.b2clogin.com/tenant.onmicrosoft.com/policy/oauth2/v2.0/logout?post_logout_redirect_uri=https%3A%2F%2Fjwt.ms%2F

【问题讨论】:

【参考方案1】:

我按照以下来源使用 David White 编写的 app auth 实现了以下注销功能。

Future<void> _logOut() async 
    try 
      //for some reason the API works differently on ios and android
      Map<String, String> additionalParameters;
      if (Platform.isAndroid) 
        //works on Android but will miss p parameter when redirected back to authorize on iOS
        additionalParameters = 
          "id_token_hint": _idToken,
          "post_logout_redirect_uri": _redirectUrl
        ;
       else if (Platform.isIOS) 
        // with p parameter when redirected back to authorize on iOS
        additionalParameters = 
          "id_token_hint": _idToken,
          "post_logout_redirect_uri": _redirectUrl,
          'p': '<tenantID>'
        ;
      
      await appAuth.authorizeAndExchangeCode(
        AuthorizationTokenRequest(
          _clientId,
          _redirectUrl,
          promptValues: ['login'],
          discoveryUrl: _discoveryURL,
          additionalParameters: additionalParameters,
          scopes: _scopes,
        ),
      );
     catch (e) 
      print(e);
    
    setState(() 
      _jwt = null;
    );
  

来源:https://www.detroitdave.dev/2020/04/simple-azure-b2c-flutter.html

【讨论】:

以上是关于Flutter app:如何实现正确的注销功能?的主要内容,如果未能解决你的问题,请参考以下文章

如何用 Flutter 实现混合开发?闲鱼公开源代码实例

如何在 Flutter App 中正确使用 BlocListener 和 BlocProvider

Flutter 注销并漂亮地替换堆栈

flutter - bloc - 我如何在我的 Ui 中使用 FutureBuilder 来正确实现 Bloc 架构

如何正确格式化 app.yaml 以使用 PHP 后端托管 Flutter Web 应用程序

Flutter 系列三:优化"书架"App,以正确的方式管理数据!