Firebase:如何使用UserCredential重新进行身份验证

时间:2018-09-21 10:11:36

标签: typescript firebase firebase-authentication ionic3

当用户首次使用电子邮件/密码登录时,我使用以下命令将Firebase的UserCredential存储为json字符串:

private afAuth: AngularFireAuth;
...
this.afAuth.auth
   .signInWithEmailAndPassword(email, password)
   .then((userCredential: firebase.auth.UserCredential) => {
      // serialize it as json
      var credentialJson = JSON.stringify(userCredential);

      // store it on device
      this.settings.setValue(this.USER_CREDENTIALS_KEY, credentialJson)
   });

现在,假设用户关闭了该应用程序,第二天又打开了该应用程序。我想使用凭据自动认证用户。因此,我将该json字符串反序列化为Firebase的UserCredential,并尝试使用以下方式重新验证用户身份:

this.settings.getValue(this.USER_CREDENTIALS_KEY)
   .then((result: string) => {
       // json-deserialize it from device
       let userCredential: firebase.auth.UserCredential = JSON.parse(result);

       // use credential to authenticate the user
       this.afAuth.auth.signInAndRetrieveDataWithCredential(userCredential.credential)
          .then((credential: firebase.auth.UserCredential) => {
            console.log("Successfully signed in");
      })
   });

但是signInAndRetrieveDataWithCredential永远不会成功。错误消息与“令牌已过期”或“无效的用户凭证”或“用户不存在”相符。

本练习的全部目的是,我不想将电子邮件/密码(或者出于明显的原因,甚至将其哈希存储在用户的设备上)存储起来,以便在用户每次使用电子邮件/密码时重新使用它们来重新进行身份验证/她运行该应用。

此外,如果我可以重新使用UserCredential对象来自动重新验证用户身份,那么无论登录方式是什么(即电子邮件/密码,谷歌,facebook等),我都可以始终使用一种方法重新认证用户。

p.s。我尝试使用令牌i.e this.afAuth.auth.signInWithCustomToken(userToken),但也没有运气。关于令牌的好处是令牌是一个字符串,我什至不需要对UserCredential对象进行json序列化/反序列化。

0 个答案:

没有答案