Javascript 使用Firebase实现无密码登录的最佳方法

Javascript 使用Firebase实现无密码登录的最佳方法,javascript,web-applications,firebase,firebase-authentication,Javascript,Web Applications,Firebase,Firebase Authentication,我想简化Firebase应用程序中的身份验证工作流,让用户无需密码即可连接: 与第三方OAuth提供商:Facebook、Google等 或 用电子邮件 如果是后者,用户只需填写地址,接收URL,然后立即登录,而无需键入/记住密码 每当他们注销或会话超时时,他们都会再次输入电子邮件,并收到新链接以启动新会话 如何使用Firebase做到这一点? 我觉得这在客户端是不可能的,那么实现该工作流的最佳服务器端例程是什么呢?对于电子邮件部分,您可以:- 使用前端自定义密码,例如:-时间戳或一些

我想简化Firebase应用程序中的身份验证工作流,让用户无需密码即可连接:

  • 与第三方OAuth提供商:Facebook、Google等

  • 用电子邮件
如果是后者,用户只需填写地址,接收URL,然后立即登录,而无需键入/记住密码

每当他们注销或会话超时时,他们都会再次输入电子邮件,并收到新链接以启动新会话

如何使用Firebase做到这一点?


我觉得这在客户端是不可能的,那么实现该工作流的最佳服务器端例程是什么呢?

对于电子邮件部分,您可以:-

  • 使用前端自定义密码,例如:-时间戳或一些随机字+时间戳。并将该时间戳存储在用户数据库中,以备将来会话过期时参考

  • 要发送启动会话的链接,您可以使用验证电子邮件发送内部链接,并根据需要调整邮件内容

  • 要了解会话何时过期,请执行以下操作:-

    • 只需检索时间戳就可以说是
      timeKeyRetrieved
    • 检查自时间戳以来经过了多少时间

PS:-用于检查用户在线期间的用户会话是否已过期。你必须使用定时器。当用户联机时,只需在AppDelegate方法中检索时间戳,或视图就会出现:

对于电子邮件部分,您可以:-

  • 使用前端自定义密码,例如:-时间戳或一些随机字+时间戳。并将该时间戳存储在用户数据库中,以备将来会话过期时参考

  • 要发送启动会话的链接,您可以使用验证电子邮件发送内部链接,并根据需要调整邮件内容

  • 要了解会话何时过期,请执行以下操作:-

    • 只需检索时间戳就可以说是
      timeKeyRetrieved
    • 检查自时间戳以来经过了多少时间

PS:-用于检查用户在线期间的用户会话是否已过期。你必须使用定时器。当用户联机时,只需在AppDelegate方法中检索时间戳,或视图就会出现:

最后,在花一些时间来解决这个问题之后,我很快意识到,电子邮件验证过程无法解决这个问题:只有已经登录的用户才能调用发送此电子邮件的功能(这很有意义)。因此,它不能用于登录


我最终将此工作流与Firebase自定义身份验证一起使用:

  • 客户
    用户要求登录,他询问了自己的电子邮件地址,并告诉他在提交表单时将收到一个完成登录的链接
  • 服务器
    接收电子邮件地址。查找或创建属于该用户的用户id,并通过电子邮件发送经过身份验证的链接(例如:
    http://myapp.com/?token=XYZ
  • CLIENT
    用户通过单击该链接返回应用程序,应用程序可以使用
    token
    参数来使用
    firebase.auth().signInWithCustomToken(token)

  • 看,妈妈,没有通行证

    最后,在花了一些时间弄明白这一点之后,我很快意识到电子邮件验证过程无法解决这个问题:只有已经登录的用户才能调用发送此电子邮件的功能(这很有意义)。因此,它不能用于登录


    我最终将此工作流与Firebase自定义身份验证一起使用:

  • 客户
    用户要求登录,他询问了自己的电子邮件地址,并告诉他在提交表单时将收到一个完成登录的链接
  • 服务器
    接收电子邮件地址。查找或创建属于该用户的用户id,并通过电子邮件发送经过验证的链接(例如:
    http://myapp.com/?token=XYZ
  • CLIENT
    用户通过单击该链接返回应用程序,应用程序可以使用
    token
    参数来使用
    firebase.auth().signInWithCustomToken(token)

  • 看,妈妈,没有通行证

    您是否考虑过在前端使用自定义密码,例如timStamp(或可能与随机字母混合使用..或其他什么)?对于会话到期,您可以使用该时间戳来知道会话何时开始。好的,但是如何使用电子邮件中的链接记录它们呢?更重要的不是时间或超时,而是使用电子邮件发送的链接登录的过程。不知道怎么做。我想你可以发送一封验证邮件,并根据你的需要更改验证邮件的文本。好主意。我可以发送另一个用于重新登录吗?是的,每当会话过期时,请再次发送验证电子邮件..等等。您是否考虑过从前端使用自定义密码,例如timStamp(或可能与随机字母混合..或什么)?对于会话到期,您可以使用该时间戳来知道会话何时开始。好的,但是如何使用电子邮件中的链接记录它们呢?更重要的不是时间或超时,而是使用电子邮件发送的链接登录的过程。不知道怎么做。我想你可以发送一封验证邮件,并根据你的需要更改验证邮件的文本。好主意。我可以发送另一个重新登录吗?是的,每当会话过期时,请再次发送验证电子邮件..等等瞧。对不起,我忘了提到我正在使用web SDK(javascript)^^对不起,我