如何在Flatter中以正确的方式存储登录凭证

17 篇文章 2 订阅
4 篇文章 0 订阅

当我们被要求开发一个登录屏幕并且有一个“记住我”复选框或自动登录功能时,我们所要做的就是将登录凭据或某种令牌保存到本地存储中。所以,下次我们回到应用程序时,我们发现表单已经填写了我们的凭据,或者更好的是,自动登录将我们从无聊的登录屏幕中解救出来。

太棒了,是的。但是安全呢?

如果我们将用户的凭据存储到 SharedPreferences 中,我们可能会将这些数据暴露给攻击者,而攻击者可能会窃取它们。

幸运的是,Flutter 社区足够大,可以创建一个涵盖此场景的包。

有一个名为flutter_secure_storage的包,由 GitHub 用户mogol创建,它将数据存储到 iOS 的 Keychains 中,并使用 AES 加密和 Android 的 Keystore。Android 版本,从 v5.0.0 开始,它也支持 EncryptedSharedPreferences。

从 4.2.1 升级到 5.0.0 时,您可以通过将 encryptedSharedPreference 参数设置为 true 来迁移到 EncryptedSharedPreferences,如下所述。这将自动迁移所有首选项。然而,这无法撤消。如果您在此之后尝试禁用 encryptedSharedPreference,您将无法读取这些值。您只能阅读启用了 encryptedSharedPreference 的那些。

Android 有一个注意事项:当引入 Keystore 时,此插件仅与 Android SDK 18+ 兼容。

现在看看我们如何将这个插件用于登录屏幕。

这是我们要创建的登录页面。


当您使用凭据填写表单并按下登录按钮时,您会将它们存储到安全存储中。当您返回应用程序时,您会发现您的凭据已自动填写在表格中。

这是一个简单的登录 UI,其背后包含任何类型的登录业务逻辑。我不会使用任何一种状态管理,只会使用旧的好setState()。这只是一个简单的代码示例来展示包的使用。

好的,让我们编码。

首先,我们需要将包添加到pubspec.yaml文件中。


是的,但是…如何flutter_secure_storage工作?

正如报告中的那样README.md,我们所要做的就是:


这是一个非常简单的包,是的。

如您所见,在第 4 行,我们创建了一个存储,使我们能够读取和存储数据。

在第 7 行,我们读取并解密由标签标识的 String 值,如果不在存储中,则为keynull 。key请记住:key不应为空。

在第 19 行,我们存储并加密value由标签标识的对象key。如果key已经在存储中,则其关联value将被更改。如果value为空,则删除与value给定的关联key。

对于我们的用例,我们需要:

  • FlutterSecureStorage存储实例;
  • 两个TextEditingController与两个TextInputField小部件关联以收集用户凭据;
  • 一种将write数据存储起来的方法;
  • 一种read从存储中获取数据的方法;

所以让我们定义前两点:)


然后,我们定义_onFormSubmit()存储用户凭据的方法。Sing In此方法是与按钮关联的操作。仅当验证表单时,该方法才会负责将数据保存在存储中。


然后,我们定义方法_readFromStorage()。我们从 中调用这个方法initState(),这样在构建我们的 UI 之前就会检索到存储中的信息。

在创建 State 时,从框架中调用 initState() 方法。(所以它只被调用一次,在 UI 被绘制之前)。


通过这种方式,我们得到了以下屏幕截图中显示的行为。
在第一次登录时,用户输入他们的凭据并按下登录按钮。
稍后,当他再次打开应用程序时,他会发现他的凭据已经输入到表单中。



做得好!这些简单的说明将允许您向应用程序添加自动登录功能,但最重要的是,存储的信息将在安全存储中加密。
通过这些简单的步骤,您的应用程序将升级。

结论

flutter_secure_storage 是一个非常简单的包,只需几个简单的步骤,我们就可以将用户数据加密保存在安全存储中。

【Android 详细知识点思维脑图(技能树)】

其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。

虽然 Android 没有前几年火热了,已经过去了会四大组件就能找到高薪职位的时代了。这只能说明 Android 中级以下的岗位饱和了,现在高级工程师还是比较缺少的,很多高级职位给的薪资真的特别高(钱多也不一定能找到合适的),所以努力让自己成为高级工程师才是最重要的。

这里附上上述的面试题相关的几十套字节跳动,京东,小米,腾讯、头条、阿里、美团等公司的面试题。把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。

由于篇幅有限,这里以图片的形式给大家展示一小部分。


详细整理点击文末卡片直接领取;

Android架构视频+BAT面试专题PDF+学习笔记

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值