登录后无法立即获取用户,但刷新工作@nuxt-auth

Posted

技术标签:

【中文标题】登录后无法立即获取用户,但刷新工作@nuxt-auth【英文标题】:Can't fetch user right after login, but refresh works @nuxt-auth 【发布时间】:2021-09-26 17:46:09 【问题描述】:

登录成功,但在刷新页面之前无法获取用户信息。

// Login Component
  try 
    await this.$auth.loginWith("mg_login", 
      data: this.user,
    );
   catch (e) 
    this.$toast.error("Error!",  duration: 1500 );
  


// Nuxt config
    auth: 
    strategies: 
        'mg_login': 
            provider: 'laravel/sanctum',
            url: `http://localhost`,
            maxAge: 60 * 60 * 120,
            endpoints: 
                user: 
                    url: '/api/user',
                    method: 'GET',
                    propertyName: false
                ,
                login: 
                    url: '/login',
                    method: 'POST'
                ,
                csrf: 
                    url: '/sanctum/csrf-cookie',
                    method: 'GET'
                ,
            ,
            cookie: 
                name: 'mg_session',
                options: 
                    path: '/',
                    sameSite: 'none',
                    maxAge: 60 * 60 * 120,
                
            ,
        ,
    ,
    redirect: 
        home: '/'
    ,
,

之后,我尝试通过在登录组件中使用 $auth.setUser(user) 或 $auth.setUser(user) 手动设置用户信息,以及 nuxt.config 中的 property/propertyName : ' '/undefined/false 选项,还是没有希望。

如果我不刷新页面,基本上就无法获取用户(或设置用户)。 http://localhost/api/user 响应如下:

/api/user response (image)

我现在缺少什么?

【问题讨论】:

也许可以试试setUser,如下所示:***.com/a/68081536/8816585 @kissu 我不知道为什么,但 setUser 似乎对我不起作用。我做了与你链接的答案完全相同的事情,甚至检查了 vue 扩展是否设置了电子邮件信息但是......是的...... 您确定您的凭据没问题吗? @kissu 是的,我只是仔细检查了一遍 【参考方案1】:

从 nuxt 配置中删除 cookie 选项解决了所有问题。似乎 laravel 和 nuxt 将 cookie 放在同名并导致冲突。

我还是不明白为什么auth在登录后无法立即获取用户,而是需要刷新页面。

【讨论】:

【参考方案2】:

propertyName 用于旧版本的Auth/Nuxt,请使用property,如下所示:

auth: 
    strategies: 
        'mg_login': 
            provider: 'laravel/sanctum',
            url: `http://localhost`,
            maxAge: 60 * 60 * 120,
            user: 
                property: false,
            , 
            endpoints: 
                user: 
                    url: '/api/user',
                    method: 'GET'
                ,
                login: 
                    url: '/login',
                    method: 'POST'
                ,
                csrf: 
                    url: '/sanctum/csrf-cookie',
                    method: 'GET'
                ,
            ,
            cookie: 
                name: 'mg_session',
                options: 
                    path: '/',
                    sameSite: 'none',
                    maxAge: 60 * 60 * 120,
                
            ,
        ,
    ,
    redirect: 
        home: '/'
    ,
,

【讨论】:

不起作用,登录后仍然不获取用户。我无法理解这个问题,如果用户 api 无法访问,它不应该在刷新后获取用户...... 当它接收到数据但没有将其存储在您的$auth.user 中时,这意味着该属性与返回的数据不匹配并且端点是可以的。如果端点有问题,它根本不会像你提到的那样获取,所以据我所知,它很可能与该属性有关。 你在使用vuex-persist吗?

以上是关于登录后无法立即获取用户,但刷新工作@nuxt-auth的主要内容,如果未能解决你的问题,请参考以下文章

谷歌登录过期后无法刷新 idToken

带有 Spotify 的 OAuth 无法使用 curl 获取刷新令牌

Firebase Datasnapshot Observable 在通过重定向登录后不会立即更新

Graphql Mutation 更新用户数据,但更改密码,注销后无法登录

页面刷新后如何保持用户登录

tp5 php 登录后 无法转跳显示用户名,需要刷新才能显示,怎么才能解决?