保存Kivy应用程序的login屏幕用户名和密码

我正在为iOS和Android的Kivy应用程序工作,并需要帮助保持用户永久login,甚至在应用程序closures或死亡后。 我正在使用分析来存储用户凭据。

我已经给App类添加了一个on_pause方法,但是这只会保持用户login,如果应用程序closures,但不会被杀死。 是否有一个安全允许持久用户loginKivy的最佳做法,甚至在一个应用程序被杀害后?

编辑:我更喜欢一个适用于Android应用程序和iOS应用程序的单一Kivy解决scheme,无需编辑/添加iOS或Android特定的代码。

下面是我们最终用来存储login信息的代码,它使用了Kivy的JsonStore。 凭证也可以使用Pythonencryption库进行encryption。

from kivy.storage.jsonstore import JsonStore from os.path import join class AppScreen(ScreenManager): data_dir = App().user_data_dir store = JsonStore(join(data_dir, 'storage.json')) ... def login(self): username = self.login_username.text password = self.login_password.text AppScreen.store.put('credentials', username=username, password=password) 

这是检索凭据的代码:

 try: store.get('credentials')['username'] except KeyError: username = "" else: username = store.get('credentials')['username'] try: store.get('credentials')['password'] except KeyError: password = "" else: password = store.get('credentials')['password'] 

在.kv文件中,用户名和密码TextInput小部件如下所示:

 TextInput: id: login_username text: root.username on_enter_key: root.login() TextInput: id: login_password text: root.password on_enter_key: root.login() 

答案基本上就是你必须简单地将数据保存在某个地方。 细节将取决于您的要求,而不是特定于基维 – 你可以查看一般的Android或Python的做法。

我不确定Android确切的权限是什么,但是将东西存储在你的应用程序目录(在主分区上,而不是“外部”存储)应该是其他应用程序无法访问的,尽pipe任何有根的东西都可以查看它们。 如果你想encryption数据,你可以使用普通的python工具,并且pipe理你自己的kivy gui来获取用户的解密密钥/密码。

您可以使用该应用程序configuration

编辑评论:基本上,除了正常的def build(self) :方法你还添加:

 def build_config(self, config): config.setdefaults('login', {'username': '', 'password': ''}) 

然后,在您的构build方法中,您可以执行以下操作:

 def build(self): config = self.config self.username = config.get('login', 'username') self.password = config.get('login', 'password') 

现在,在用户login成功之后,您只需要将新的用户名/密码写入configuration:

 self.config.set('login', 'username', input1) self.config.set('login', 'password', input2) 

请记住,这将保存密码未encryption。 也许你可能想在你的手机上encryption密码。 它会将文件保存到/sdcard/<appname>.ini 。 所以你应该真的encryption它,因为每个有权访问SD卡的人都可以阅读!