在 Flutter 中限制登录尝试?

Posted

技术标签:

【中文标题】在 Flutter 中限制登录尝试?【英文标题】:Limiting Login attempt in Flutter? 【发布时间】:2021-06-18 18:15:57 【问题描述】:

我想找到一种方法来限制 Flutter/Firebase 中的登录尝试。我希望用户能够在等待 5 分钟后尝试登录。我在互联网上搜索过,找不到任何资源来帮助我。您有任何示例代码供我参考吗?

【问题讨论】:

有没有人知道如何限制 Flutter 中的登录尝试? 【参考方案1】:

您可以使用SharedPreferences 来存储用户的最后一次尝试。 在用户可以登录之前,您必须检查是否有登录限制并且必须通过 5 分钟。 在checkLogin 中,您检查用户是否有限制,在这种情况下,是否存储了登录尝试时间。如果没有,那么他没有任何限制,可以照常登录。否则你检查是否已经过了 5 分钟。

static const int fiveMinutes = 5 * 60 * 1000;
static const String lastAttemptKey = 'lastAttempt';

Future<void> checkLogin() async 
    // Initialize SharedPreferences
    SharedPreferences prefs = await SharedPreferences.getInstance();

    // Get last login attempt
    final int lastAttempt = prefs.getInt(lastAttemptKey);

    // Check if is not null
    if (lastAttempt != null) 
      // Get time now
      final int now = DateTime.now().millisecondsSinceEpoch;

      // Get the difference from last login attempt
      final int difference = now - lastAttempt;

      // Check if 5 minutes passed since last login attempt
      if (difference >= fiveMinutes) 
        // User can try to login again
        prefs.remove(lastAttemptKey);
        await login();
       else 
        // Still in limit, show error
        print('You have to wait 5 minutes');
      
     else 
      // First try of user login
      await login();
    
  

在这里用户可以尝试登录。如果成功,请导航到主页。否则,您将尝试登录的时间设置为本地存储。

Future<void> login() async 
    if (login.success) 
      // Navigate to HomePage
     else 
      // Initialize SharedPreferences
      SharedPreferences prefs = await SharedPreferences.getInstance();

      // Store attempt time
      prefs.setInt(lastAttemptKey, DateTime.now().millisecondsSinceEpoch);
    
  

【讨论】:

【参考方案2】:

您可以将时间存储在本地存储中,当用户再次登录时,将存储的时间与当前时间匹配,如果它小于当前时间则显示错误。

【讨论】:

是的。我只需要一个代码 sn-p 作为我的参考样本 - 我已经搜索了这个问题,但我无法在任何地方找到它。 您可以使用pub.dev/packages/shared_preferences 包将时间存储到本地,您可以在此包自述文件中查看如何将数据存储在本地存储中的示例。

以上是关于在 Flutter 中限制登录尝试?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PHP 中限制用户登录尝试

在flutter中使用google auth的逻辑(一个用户只能从一个gmail和同一设备登录)?

如何限制 Spring Security 中的登录尝试?

在 Symfony 4 和 FOSRestBundle 下限制登录尝试

在C ++中限制登录尝试次数

springboot + shiro 尝试登录次数限制与并发登录人数控制