在哪里放置代码以在 Vue.js 中设置 Firebase 身份验证状态持久性?

Posted

技术标签:

【中文标题】在哪里放置代码以在 Vue.js 中设置 Firebase 身份验证状态持久性?【英文标题】:Where to place code to set Firebase auth state persistence in Vue.js? 【发布时间】:2020-09-16 14:40:16 【问题描述】:

概述

我正在 Quasar/Vue.js 和 Firebase 中构建一个需要对用户进行身份验证的网络应用程序。

我正在努力实现的目标

一个非常常见的功能 - 即使用户关闭浏览器/选项卡后也保持登录状态。

可能的解决方案

我知道我可以使用 localStoragecookies 来设置用户身份验证状态。但是,我想允许 Firebase 身份验证为我做这件事(如果可以的话)。

我检查了这方面的文档 - https://firebase.google.com/docs/auth/web/auth-state-persistence 他们很好,除了我不知道在哪里放置提到的这段代码:

firebase.auth().setPersistence(firebase.auth.Auth.Persistence.LOCAL)
  .then(function() 
    // New sign-in will be persisted with session persistence.
    return firebase.auth().signInWithEmailAndPassword(email, password);
  )
  .catch(function(error) 
    // Handle Errors here.
    var errorCode = error.code;
    var errorMessage = error.message;
  );

我不知道把它放在以下哪个地方:

onAuthStatechanged 监听器? 在 App.vue(根 Vue)实例中? 其他地方?

如果有人能帮忙,我会很高兴。谢谢。

【问题讨论】:

【参考方案1】:

无论您有firebase.initializeApp(),我都会这样做。例如

firebase.initializeApp(
  // config goes here
);

export const auth = firebase.auth()

auth.setPersistence(firebase.auth.Auth.Persistence.LOCAL)

请注意,LOCAL 已经是网络应用程序中的默认设置。

你真的不需要等待那个承诺。来自docs

这将返回一个承诺,一旦状态完成从一种类型的存储复制到另一种类型,该承诺就会解决。 在更改持久性后调用登录方法将等待该持久性更改完成,然后再将其应用于新的身份验证状态。


它的模块化版本 (v9+) 如下所示...

import  initializeApp  from "firebase/app";
import 
  browserLocalPersistence,
  getAuth, 
  setPersistence
 from "firebase/auth";

const app = initializeApp(
  // config goes here
)

export const auth = getAuth(app);

setPersistence(auth, browserLocalPersistence)

【讨论】:

firebase.auth 在 firebase 版本 9 中似乎不再存在 @kamatheuska 我已经更新了答案以匹配 v9,但迁移起来应该不会太难。文档甚至显示了命名空间与模块 API 的并排比较 不是什么难,而是为用户提供最准确的答案,你不觉得吗? @kamatheuska 在 *** 上的答案中特定于版本的代码最终肯定会过时。产品文档应始终是规范的事实来源 不确定你的论点是什么或它的目的。我们应该保留已弃用的答案吗? IMO 你所做的是适当的事情,编辑答案以反映手头问题的当前解决方案。

以上是关于在哪里放置代码以在 Vue.js 中设置 Firebase 身份验证状态持久性?的主要内容,如果未能解决你的问题,请参考以下文章

减少数组以在 Swift 中设置

Vue.js:如何在 .vue 模板文件中的 vue 方法中设置数据变量

如何在vue js中设置默认日期

如何在以下代码中设置条件以在分页中标记当前页面?

在 Vue.js + Firebase 中设置项目的更好方法是啥? [复制]

需要帮助在 Vue.js 框架中设置变量