【问题标题】:Flutter - Rest API Auth expiryFlutter - Rest API 身份验证到期
【发布时间】:2019-12-09 18:01:06
【问题描述】:

我目前正在使用 .Net 中内置的 REST API 在我的 Flutter 应用中实现 Auth。

其余 API 返回一个令牌和令牌到期日期,我将此信息存储在安全存储中。

该应用由多个页面(脚手架)组成。

我的问题是,我怎样才能有一个后台任务来监视到期日期,并在令牌到期时自动将用户注销?

这是我的日期存储在“2019-07-31T11:25:46.2265012Z”中的格式

【问题讨论】:

  • 您能否解释一下为什么要将其作为后台任务执行,而不是每次打开应用程序时都进行检查?然后,您可以创建一个简单的方法来检查当前日期,将其与令牌进行比较,例如,如果令牌发出 30 天以上,那么它将将用户发送到登录页面。
  • 您好,感谢您的回复,我们的想法是只允许用户在给定的时间段内使用该应用程序,一旦该时间段结束,我们希望他们退出,即使用户正在使用该应用程序。
  • 谢谢。如果是这种情况,这个包可能会有一些用处,因为它还包括调度 - pub.dev/packages/flutter_local_notifications

标签: authentication flutter timer token logout


【解决方案1】:

这里有一个答案。使用调度绑定,它可以重建一个将你的令牌持续时间传递给它的小部件,以便在持续时间结束时调用调度绑定器执行一个函数以再次登录用户

@覆盖

void initState() {    
 SchedulerBinding.insta``nce.addPostFrameCallback((_) {
  //add your login function here
});}

【讨论】:

  • 这个答案在技术上可能是正确的,但在语法上令人困惑。尝试改进解释的措辞。
【解决方案2】:

好问题!

老实说,在这个项目中,这不是您面临的唯一问题。在这种情况下,我认为您没有状态管理。

我建议您搜索状态管理和应用架构。使用适当的状态管理和架构实施您的项目将使您的项目达到一个不同的水平,并使其可维护和结构化。伟大的设计模式之一是 BLoC。您将拥有一个 AuthBloc 来管理身份验证状态并监听事件。

我推荐this视频。

如果您有兴趣,我强烈建议您观看 Flutterly 的“BLoC - 从零到英雄”课程,以了解您以后的项目。

祝你好运!

【讨论】:

    【解决方案3】:

    创建一个静态方法,在用户登录时使用令牌时间进行初始化。此方法应在记录页面调用。方法应该是这样的;

    var tokenTime;    //tokenTime should be initialized when user signin. 
    
    static void checkValidity(){
        Future.delay(duration: Duration(milliseconds: tokenTime), (){ logout();});
    }
    

    为避免用户停止应用刷新token,可以存储在SharePreference中

    【讨论】:

      【解决方案4】:

      我认为您可以将另一个端点添加到您的 api 以在每次用户进入应用程序时刷新令牌,以便您将保存的令牌发送到此端点,它将以新的响应

      【讨论】:

      • 您好,感谢您的回复,出于安全原因,我们不希望令牌刷新,我们希望用户必须重新登录。
      • 这样也完全安全!
      • 是的,我已经构建了多个以这种方式工作的应用程序,但是,该应用程序的业务需求略有不同。他们希望用户在计时器到期后立即退出。
      猜你喜欢
      • 2020-06-18
      • 2017-12-15
      • 2019-03-31
      • 2018-07-26
      • 2019-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多