是否可以为不活动实现自动注销功能?

Posted

技术标签:

【中文标题】是否可以为不活动实现自动注销功能?【英文标题】:Is it possible to implement an auto logout feature for inactivity? 【发布时间】:2020-01-21 18:48:54 【问题描述】:

我正在尝试在使用 Firebase 时在 x 分钟不活动后实现自动注销功能,身份验证方法是电子邮件。

我在网上搜索过,但我发现的一切都不是为了扑腾。

任何帮助将不胜感激谢谢!

【问题讨论】:

【参考方案1】:

您可以对所有 api 实例使用拦截器,例如 this,但可以自定义 onRequest 方法。

这个想法是:在命中 api 发生时保存时间信息。然后每当发生另一个命中 api 时,检查从现在到上次保存的时间之间的持续时间。

如果持续时间长于,比如说5分钟,那么你可以调用方法logout,否则你可以继续请求

这里有一些sn-p来说明:

Future<Dio> getApiClient() async 
_dio.interceptors.clear();
_dio.interceptors
    .add(InterceptorsWrapper(onRequest: (RequestOptions options) 
  // Do something before request is sent

  var pref = await SharedPreferences.getInstance();
  var timeNow = DateTime.now().millisecondsSinceEpoch;
  var lastHitApi = pref.getInt(LAST_HIT_API);
  var delay = timeNow - lastHitApi;
  pref.setInt(LAST_HIT_API, timeNow);

  if (delay > DELAY_MAX) 
    // do logout here
  


  return options;

,onResponse:(Response response) 
    // Do something with response data

    return response; // continue

, onError: (DioError error) async 
  // Do something with response error

));

_dio.options.baseUrl = baseUrl;
return _dio;

编辑:我猜this 一个更可取

【讨论】:

【参考方案2】:

设置超时时间和调用注销功能

Timer(Duration(seconds: 5), () => logOut());

【讨论】:

这如何帮助检测一段时间内的不活动?

以上是关于是否可以为不活动实现自动注销功能?的主要内容,如果未能解决你的问题,请参考以下文章

当用户在页面 javascript 或 php 中不活动 3 分钟时自动注销

关于从 Rails 2 中所有浏览器中的所有活动会话自动注销的问题

Asp.net:实现自动注销功能

如何在 CMS PHP 中自动注销非活动用户

用户不活动注销 PHP

打开多个选项卡的自动注销