【问题标题】:How to store firebase user email and password in Ionic Storage如何在 Ionic Storage 中存储 firebase 用户电子邮件和密码
【发布时间】:2018-07-24 12:57:02
【问题描述】:

我是 ionic 3 和 firebase 的新手。我已经构建了一个使用电子邮件和密码来验证用户身份的应用程序。现在,每当您退出应用程序时,它都会将用户注销并且他们必须重新登录,这可能很麻烦。 我已经看到一些用户将用户凭据(电子邮件和密码)保存在 Storage (@ionic/storage) 中的提示,因此下次他们使用该应用程序时,它会自动登录。 这是解决这个问题的正确方法吗?如果是这样,我可以看看和例子吗?任何帮助都会很棒。

【问题讨论】:

  • 永远不要将用户的凭据保存在设备上。您是否使用onAuthStateChanged 来检测用户已登录?
  • 我使用onAuthStateChanged 来获取当前登录的用户,它看起来像:firebase.auth().onAuthStateChanged(function(user) { if (user) { this.navCtrl.setRoot(LoginPage); } else { // No user is signed in. } });
  • 然而,这个从来没有解决过的问题对我没有用。我已经多次构建到 ios 来测试这一点,每当我登录然后关闭应用程序时,navCtrl 永远不会通过身份验证,用户必须再次登录。有没有更简单的方法来做到这一点?
  • 在某些情况下,localStorage 在 iOS 设备的 ionic 低内存中没有持久化。 Firebase Auth 正在努力迁移到 indexedDB,因为它更可靠。您需要调查此问题的根本原因。尝试将数据保存在localStorage 中,然后重新启动应用程序。如果数据丢失,那么这就是问题所在。您可以尝试将数据备份到indexedDB 或其他更持久/可靠的存储中,然后在应用启动时将其复制回localStorage。在 Firebase Auth 修复此问题之前,您可以使用它。

标签: firebase firebase-authentication ionic3 ionic-storage


【解决方案1】:

当然可以,但最好使用选中的复选框“记住我”来存储,这允许用户选择是否使用它。

我更喜欢使用 NativeStorage

import { NativeStorage } from '@ionic-native/native-storage';

let login: string;

constructor(private nativeStorage: NativeStorage, ...) {
    this.login = '';
}

商店示例:

this.nativeStorage.setItem('LOGIN', 'Your Value').then(
    () => {
        // Do something, optional
    },
    error => {

    }
);

获取示例:

this.nativeStorage.getItem('LOGIN').then(
    (data) => {
        // Get value and put it into our variable
        this.login = data;
    },
    error => {

    }
);

并在你的视图中使用它:

<ion-input [(ngModel)]="login" type="text"></ion-input>

更多关于 NativeStorage 的信息:

https://ionicframework.com/docs/native/native-storage/

【讨论】:

  • 在用户设备上存储纯文本密码凭据是最糟糕的安全做法之一。
  • 为什么是负面的? :) 显然,这只是如何存储和获取的示例,而不是完整的解决方案。当然,密码必须加密,或者只存储用户名。而决定,如何去做,取决于后端。
  • 这是网络安全 101。密码必须使用强大的单向散列算法进行散列和加盐处理,并存储在服务器端(绝不是纯文本)。 Firebase 发布可撤销的令牌以及短暂的 ID 令牌。如果您提供了一种存储这些令牌的方法,我可以理解,但强烈建议不要在设备上存储用户密码。您的回答是对这种不良做法的认可,不应受到鼓励,尤其是在不断有消息称用户凭据因不良安全做法而泄露的情况下。
  • 好的,你说得对。而且我没有推荐商店密码。我只展示了如何在没有密码的情况下使用 NativeStorage,例如只有用户名。
猜你喜欢
  • 2018-01-18
  • 2018-01-09
  • 1970-01-01
  • 2021-12-20
  • 2015-09-05
  • 2018-09-25
  • 2015-11-16
  • 2018-03-12
  • 1970-01-01
相关资源
最近更新 更多