【问题标题】:Firebase RememberMe functionalityFirebase RememberMe 功能
【发布时间】:2017-01-16 06:54:36
【问题描述】:

我的 webapp 允许不同的用户使用不同的凭据(使用 signInWithEmailAndPassword)在同一台机器上的不同选项卡/浏览器中登录。我通过为每次登录调用firebase.initializeApp(config, 'appName'+new Date().getTime()) 来实现这一点

当用户关闭选项卡或重新加载(在window.onbeforeunload)时,我调用.auth().signOut() 将他注销。

我现在想向我的应用页面添加 RemeberMe 功能,这是一个复选框,当(且仅当)勾选时,将允许从同一台机器和用户名进行以下登录,而无需提供密码即使机器在此期间被重新启动。

如何实现?

我正在考虑的是(当记住我打开时)在客户端上生成一个存储在 cookie 中的令牌并在数据库上维护一个将令牌链接到密码的表,这有两个问题,首先密码按原样保存在数据库上,这是错误的,其次需要将密码发送回客户端,这也是错误的。

还有更好的选择吗?

【问题讨论】:

  • 记住是默认行为。你想禁用它吗?如果您收听onAuthStateChanged,您应该会看到自动重新认证(即记住)。
  • 忘了提到我在重新加载页面时打电话给.auth().signOut()(更新问题)。也许我需要的只是勾选框在勾选时不调用注销?我希望用户确定他是否希望会话在默认为 no 的机器上持续存在。
  • 是的,这样就可以了,听onAuthStateChanged判断登录是否短路。
  • 对不起,我的问题误导了,我现在已经扩展了,你能再看看吗?关键是即使用户重新启动他的机器(并且上次登录时勾选了该框),rememberme 也需要工作
  • 这听起来更棘手。我想你必须自己实现它。您还必须存储凭据 - 以便您可以调用 signInWithEmailAndPassword - 这听起来不安全。

标签: javascript firebase firebase-authentication


【解决方案1】:

只需在您的登录表单中添加一个rememberMe 复选框,并带有一个引用变量(例如remember)并像这样使用firebase setPersistence

firebase.auth().setPersistence(this.remember.checked ? fireauth.Auth.Persistence.LOCAL : fireauth.Auth.Persistence.SESSION)

(这里我以javaScript为例)

【讨论】:

    【解决方案2】:

    从 Firebase JS 4.2.0 开始,您现在可以指定会话持久性。您可以通过调用在多个选项卡中登录不同的用户: firebase.auth().setPersistence(firebase.auth.Auth.Persistence.SESSION)

    当窗口关闭时,会话被清除。

    有关更多信息,请查看https://firebase.google.com/support/release-notes/js#4.2.0https://firebase.google.com/docs/auth/web/auth-state-persistence

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-16
      • 1970-01-01
      • 2020-06-09
      • 2021-01-29
      • 1970-01-01
      • 2020-05-30
      • 2018-11-29
      • 2019-02-28
      相关资源
      最近更新 更多