在 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 中限制登录尝试?的主要内容,如果未能解决你的问题,请参考以下文章
在flutter中使用google auth的逻辑(一个用户只能从一个gmail和同一设备登录)?