Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Nuxt新手- Firebase auth不进行刷新

Nuxt新手- Firebase auth不进行刷新
EN

Stack Overflow用户
提问于 2019-12-22 13:02:12
回答 2查看 2.1K关注 0票数 0

我已经搜索并尝试了大量的例子和不同的东西,但仍然完全停留在这里--我已经在…上扯了两天的头发了我有一个常见的问题,我的应用程序工作良好,如果我登录并点击链接,但如果我刷新或点击一个网址直接在浏览器,Firebase似乎认为我没有一个认证的会话。

编辑--经过更多的思考后,我认为这是因为在刷新时,Vue 服务器正在发出请求。在单击链接时,客户端发出请求.最大的区别是没有在服务器请求上设置或发送会话/ cookie。发射的解决方案是重定向吗?还是有一种方法可以在页面加载时发送浏览器的cookie/会话?还是在Vue和Firebase之间构建某种服务器到服务器的身份验证,然后通过Vue/ Vuex管理登录状态?

这是FB返回的错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Error during getting LIST of presentations! FirebaseError: [code=permission-denied]: Missing or insufficient permissions. 

以下是我正在做的事情:

首先,在我的存储/index.js中,我们解码了一个用户数据cookie,并将其分配给一个名为setUserLoggedIn的操作(我知道我有相同的值集两次,但是保留它的完整性:)

这段代码看起来像预期的那样工作(也就是说,它总是在Nuxt启动时执行的。我们这样做是为了确保在我们做任何事情之前,我们已经从Vuex商店中获得了cookie中的用户数据。它解码cookie/将预期值发送到setUserLoggedin

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    import { getUserFromCookie } from '@/helpers'
export const actions = {
  async nuxtServerInit({ dispatch }, { req }) {
    const user = getUserFromCookie(req)
    console.log('This code fires first with user ' + JSON.stringify(user))
    if (user) {
      console.log('Found a user cookie - maybe we can log them in')
      await dispatch('user/setUserLoggedin', {
        email: user.email,
        uid: user.user_id,
        thisUserid: user.user_id
      })
    }
  }
}

然后,我们通过两个突变将登录状态和用户详细信息提交回Vuex的状态,然后确认用户是使用Firebase登录的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 setUserLoggedin({ commit }, user) {

    commit('LOGIN_STATUS', true)
    console.log(`Re-affirming login user object is ${JSON.stringify(user)}`)
    commit('LOGIN_USER', {
      loginInstanceId: 'a-key-to-track-each-login-session',
      useruniqueid: user.thisUserid,
      emailaddress: user.email,
      uid: user.thisUserid
    })
    return UserService.affirmLogin(user)
  },

最后,我试着检查一下是否有一个使用Firebase的会话(firebase.auth().currentUser返回未定义的)。使用其他Firebase命令侦听状态更改或诸如此类的事情没有任何进展.从字面上说,我尝试过的每一件事都是空白的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  async affirmLogin(myuser) {
    const currentUser = await firebase.auth().currentUser
    console.table(currentUser)
  },

我还设置了一个带有Firebase令牌的令牌

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
await firebase
        .auth()
        .signInWithEmailAndPassword(user.emailaddress, user.password)
        .then(() => {
          firebase.auth().onAuthStateChanged(user => {
            currentUser = user.uid
          })
        })
      const token = await firebase.auth().currentUser.getIdToken(true)
      Cookies.set('access_token', token) // saving token in cookie for server rendering

我尝试了无数不同的东西--从配置Vuex状态/getter和Firebase命令,到注释我的代码、调试等,但是我无法理解为什么这不起作用。尽管我有一个cookie,并且我认为Vuex存储中有数据,但是Firebase似乎忽略了或看不到任何现有的刷新会话。

但是,如果我创建了一个通过UI导航到的页面,点击上面的路径(即,我使表单提交按钮点击affirmLogin),它就会起作用。

我认为问题是,我的会议有些不对劲,但我只是看不出它可能是什么。我也不确定Firebase应该如何在刷新时收集userid。我见过的其他例子似乎“只是起作用了”,但对我来说却不是:(任何帮助都非常感谢!)

谢谢

EN

回答 2

Stack Overflow用户

发布于 2019-12-22 15:07:53

TBH我不知道Vue、Nuxt或Firebase,但我的第一个猜测是,当您要求Firebase返回currentUser时,它还没有完全初始化或类似的类型。消防队的医生们似乎同意:

备注:由于auth对象尚未完成初始化,currentUser也可能为空。如果使用观察者来跟踪用户的登录状态,则不需要处理这种情况。

您试过使用身份验证状态观测器吗?看起来是这样的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
firebase.auth().onAuthStateChanged(function(user) {
  if (user) {
    // User is signed in.
  } else {
    // No user is signed in.
  }
});

我建议尽可能早地在代码中设置它,以确保您不会错过身份验证状态更改。你可以从这样的事情开始:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
setUserLoggedin({ commit }, user) {
  const userPromise = new Promise((resolve, reject) => {
    firebase.auth().onAuthStateChanged(function(user) {
      if (user) {
        // User is signed in.
        console.log('got user', user);
        resolve(true);
      } else {
        // No user is signed in.
        resolve(false);
      }
    });
  });

  commit('LOGIN_STATUS', true);

  console.log(`Re-affirming login user object is ${JSON.stringify(user)}`);
  commit('LOGIN_USER', {
    loginInstanceId: 'a-key-to-track-each-login-session',
    useruniqueid: user.thisUserid,
    emailaddress: user.email,
    uid: user.thisUserid,
  });

  return userPromise;
}

我很肯定这是不够好的最终解决办法,但它可能会帮助你走上正确的轨道,如果我的猜测是正确的。

票数 0
EN

Stack Overflow用户

发布于 2020-04-11 15:19:22

在刷新或重新加载后收到未经验证的错误时,我遇到了同样的问题,问题来自用户端点的propertyName,如果您直接返回用户,而不是使用对象'user':{...},您应该将propertyName : false放在nuxt config的auth选项中,您可以通过直接执行下面的代码来检查auth将收到什么结果。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let user = await this.$auth.requestWith(    
    'local',    //strategy name
    null,       //endpoint
    { url: '/api/user', method: 'get', propertyName: false } // options.endpoints.user
);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59448002

复制
相关文章
firebase怎么用_firebase是什么
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/168361.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/20
4.2K0
firebase怎么用_firebase是什么
CDN刷新目录不生效?
选择 “刷新变更资源” 模式,当用户访问匹配目录下资源时,会回源获取资源的 Last-Modify 信息,若与当前缓存资源一致,则直接返回已缓存资源,若不一致,回源拉取资源并重新缓存;
任雯霄
2020/12/30
6.1K1
Vue 实现前进刷新,后退不刷新的效果
假设列表页为 list.vue,详情页为 detail.vue,这两个都是子组件。
谭光志
2020/09/28
3K0
vue 参数变化页面不刷新
查询参数变化,不刷新 http://localhost:8081/#/detail?id=1 http://localhost:8081/#/detail?id=2 参数变化,不刷新 http://
onety码生
2018/11/21
2.5K0
js – form表单提交不刷新
大家已经发现了, 当我们点击submit提交form表单的时候, 他会刷新一次, 如果不想它刷新的话有下面两种方法:
全栈程序员站长
2022/08/01
14.6K0
RDP你的凭据不工作/RDP密码不刷新
如果你不属于上述的情况,请查看:https://learn.microsoft.com/zh-cn/windows-server/remote/remote-desktop-services/troubleshoot/rdp-error-general-troubleshooting#check-whether-a-group-policy-object-gpo-is-blocking-rdp-on-a-local-computer
阿龙w
2022/12/02
12.7K0
RDP你的凭据不工作/RDP密码不刷新
Laravel7使用Auth进行用户认证
Laravel7 的 laravel/ui 包提供了一种快速方法,可以使用一些简单的命令来支持你进行身份验证所需的所有路由和视图:
Lansonli
2021/10/09
5.8K0
vue强制刷新页面方法_vue页面回退不刷新
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/17
5K0
谷歌?新手不推荐 选它就对了
首先第一个好处就是可以登录账号,实现账号登录同步书签,添加书签方便多了,还能扩展组件。
江拥羡橙
2022/11/17
6330
谷歌?新手不推荐 选它就对了
将 Supabase 作为下一个后端服务
对于想快速实现一个产品而言,如果使用传统开发,又要兼顾前端开发,同时又要花费时间构建后端服务。然而有这么一个平台(Baas Backend as a service)后端即服务,能够让开发人员可以专注于前端开发,而无需花费大量时间和精力来构建和维护后端基础设施。
愧怍
2023/03/14
7.8K0
将 Supabase 作为下一个后端服务
nuxt+vue仿微信聊天界面|nuxt.js聊天室
nuxtjs是一个基于vue.js构建的服务端渲染框架。让你的网页也拥有SEO能力。只要是会vue,上手及非常简单了。
andy2018
2020/10/16
3.7K0
nuxt+vue仿微信聊天界面|nuxt.js聊天室
layui打开iframe窗口不刷新的问题
这个问题可能是我工作以来,最死磕不算bug的一个了,晚上熬夜到三点钟,终于找到了解决的办法。
王小婷
2019/04/29
4K0
layui打开iframe窗口不刷新的问题
在nuxt.js项目中对axios进行封装
不管是在服务端还是客户端获取数据都可以使用axios。在实际的开发过程中,每次请求中往往要携带一些自定义的参数或进行一些统一的处理,所以对axios进行封装是必不可少的。那么对于axios封装应该写在那个目录下呢?
用户3258338
2019/09/17
6.3K0
将 Supabase 作为下一个后端服务
对于想快速实现一个产品而言,如果使用传统开发,又要兼顾前端开发,同时又要花费时间构建后端服务。然而有这么一个平台(Baas Backend as a service)后端即服务,能够让开发人员可以专注于前端开发,而无需花费大量时间和精力来构建和维护后端基础设施。
愧怍
2023/02/24
4.7K0
将 Supabase 作为下一个后端服务
Firebase 如何创建登录 Token
Firebase 的 token 可以使用 firebase 命令行工具来进行创建。
HoneyMoose
2021/04/02
2.5K0
Firebase 如何创建登录 Token
JWT 的详细资源
1、laravel firebase/php-jwt token验证
八点半的Bruce、D
2023/02/28
2.9K0
JWT 的详细资源
WPF 的 VisualBrush 只刷新显示的视觉效果,不刷新布局范围
WPF 的 VisualBrush 可以帮助我们在一个控件中显示另一个控件的外观。这是非常妙的功能。
walterlv
2023/10/22
4440
WPF 的 VisualBrush 只刷新显示的视觉效果,不刷新布局范围
Vue 改变数据,页面不刷新的问题
最近在用 element-ui 开发一个网站,使用 table 组件时,发现修改完数据,有时候会延迟一两秒,页面才会发生变化。
谭光志
2020/09/28
3.4K0
点击加载更多

相似问题

如何持久化firebase-auth而不是使用Nuxt刷新?

220

Nuxt.js + nuxt-auth模块刷新jwt

314

Nuxt Auth函数不是反应性的,需要进行硬刷新。

12

Nuxt.js + Auth ( jwt刷新令牌)

25

刷新后FireBase auth签出

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文