我可以将 Laravel Sanctum 令牌身份验证与 Nuxt/Auth 一起使用吗?

Vin*_*ein 2 nuxt.js laravel-sanctum nuxt-auth

我正在尝试使用 Sanctum 获取令牌身份验证,nuxt/auth但其中几个功能似乎不起作用。

我有一个端点,通过用户名/电子邮件和密码对用户进行身份验证,API 方面没有问题,它返回具有正确范围的个人访问令牌。

然而,在nuxt/auth这些方法中,setUserTokensetUser都应该能够处理以不同方式授予的用户登录,但这两种方法都没有完成它应该做的事情。

this.$auth.loginWith('sanctum', {
    data: this.form
}).then((response) => {
    // this should set the token to storage
    // then fetch the user with the token 
    // but it only sets the token to storage
    this.$auth.setUserToken(response.data)
    .then(() => {
        // so I have to fetch the user myself with VuexORM
        this.user.api().get('/me')
        .then((result) => {
            // my user is set to the model, but not to auth
            this.$auth.setUser(result.response.data) // sets user but won't set loggedIn to true.
        })
    })
}).catch((e) => {
    console.log(e.message)
})
Run Code Online (Sandbox Code Playgroud)

那么,在这一切失败的情况下,我是否错过了什么?或者我应该完全跳过nuxt/auth

fev*_*vid 6

它可以工作,Nuxt/Auth但使用文档给出的密室策略Nuxt/Auth使用基于 cookie 的身份验证,您可以使用本地策略进行token基于密室的身份验证。

您不需要setUserTokensetUser手动,Nuxt/Auth如果您配置正确,我们会为您完成。

您可以像下面这样配置它,根据您的端点进行更改:

  auth: {
    strategies: {
      local: {
        token: {
          property: 'token',
        },
        user: {
          property: false,
        },
        endpoints: {
          login: { url: '/auth/login', method: 'post' },
          logout: { url: '/auth/logout', method: 'post' },
          user: { url: '/auth/user', method: 'get' }
        }
      }
    }
  },
Run Code Online (Sandbox Code Playgroud)

并确保在Laraveltoken登录用户后返回['token' => $user->createToken('login')->plainTextToken]

  • 您可以根据返回用户的方式更改它,我通过“return User::find(auth()->id())”直接返回用户数据,因此它没有属性。如果您像“return ['user' => User::find(auth()->id())]”那样发送它,则需要使用“property: 'user'” (3认同)