【问题标题】:Checking if user is still authenticated in angularfire2检查用户是否仍在 angularfire2 中通过身份验证
【发布时间】:2017-09-11 09:08:37
【问题描述】:

我有一个使用 angularfire2 的有效身份验证,我只是想知道是否有另一种方法来检查用户最近登录后是否经过身份验证而没有访问服务器? 我这样做的方式是这样的

isAuthenticated():boolean{
 this.af.auth.subscribe(data => {
  if(data ){
  // User is authenticated
    return true;
  }
});
}

感谢任何帮助

编辑 1:

我决定仍然使用原始代码来检查用户是否最近登录。当您在应用程序启动时不检查用户时,@cartant 的建议已经足够了,因为它可能会返回 null,如中所述firebase 官方文档。我在这里使用它的方式是,我的菜单项应该只显示给经过身份验证的用户,并且使用firebase.auth().currentUser 将始终在页面的初始加载时返回 null。

【问题讨论】:

  • 你得到了什么。有什么错误吗?
  • @Aravind 我没有收到错误消息。我只想知道是否有一种方法可以检查用户是否在不使用 this.af.auth.subscribe() 的情况下登录

标签: angular firebase firebase-authentication angularfire2


【解决方案1】:

AngularFire2 目前正在进行一些重构,其身份验证 API 的重要部分将被删除,以支持将 Firebase Web API 与 AngularFire2 结合使用。 this issue有更多信息。

您使用的可观察对象将保留在 AngularFire2 中,您可以订阅它以接收身份验证状态更改的通知。

但是,如果您只想确定当前是否存在经过身份验证的用户,那么 Firebase Web API 中有一个 currentUser 属性会告诉您:

import * as firebase from "firebase";
...
console.log(firebase.auth().currentUser);

【讨论】:

  • 感谢您的回答。是的,我也在某处看到了该代码。我只是认为angularfire2中可能有一个api。我想我只需要等待更新。
  • 不用担心。我试图在答案中指出的一点是,AngularFire2 正在被重构以避免简单地包装可以使用底层 Firebase Web API 完成的事情,并且将鼓励将两者结合使用。所以 currentUser 的等效项不会被添加到 AngularFire2 中,您不妨立即开始使用 Firebase Web API 的 currentUser
  • 感谢您的回答。我决定仍然使用我的原始代码
  • 在我的情况下,使用firebase.auth().currentUser,每次刷新页面后都需要进行身份验证。这样就不会存储身份验证。
  • 但是即使退出后firebase.auth().currentUser仍然返回和对象,所以退出后如何将isLoggedIn变量设置为false,因为我需要在登录和退出后更改html,所以需要检测更改 isLoggedIn 变量。
【解决方案2】:

您可以使用预建的Route users with AngularFire guards

AngularFireAuthGuard 使用 AngularFireAuth 提供了一个预构建的 canActivate Router Guard。

您可以通过将 RXJS 管道传递给路由数据的 authGuardPipe 来自定义此 AngularFireAuthGuard 的行为。你可以了解更多here

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2023-03-04
  • 2018-12-28
  • 2017-07-10
  • 2017-07-15
  • 2022-09-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多