【发布时间】: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