【问题标题】:Nuxt Auth Module - how to get a user by id/usernameNuxt Auth Module - 如何通过 id/username 获取用户
【发布时间】:2020-09-05 22:14:56
【问题描述】:

我正在尝试将“Nuxt 身份验证模块”集成到我的 Nuxt 应用程序中。

https://auth.nuxtjs.org/

我已经配置了代理和身份验证模块并设置了“本地策略”。

https://auth.nuxtjs.org/schemes/local.html

我的“登录”端点工作正常,我将“propertyName”设置为“access_token”,因为这是我的令牌的价值所在。我看到“Vuex”将我的“LoggedIn”状态更新为 true,并且我还可以在 Chrome 的“网络”选项卡中看到令牌响应。

但是我真的很难理解“用户”端点是如何工作的。

给出的例子:

auth: {
  strategies: {
    local: {
      endpoints: {
        login: { url: '/api/auth/login', method: 'post', propertyName: 'token' },
        logout: { url: '/api/auth/logout', method: 'post' },
        user: { url: '/api/auth/user', method: 'get', propertyName: 'user' }
      },
      tokenRequired: true,
      tokenType: 'bearer'
    }
  }
}

上面的和我的差不多,'User'端点怎么知道哪个用户登录了?

我正在使用第三方系统进行身份验证,因为我正在将应用程序集成到第三方系统中。他们的 REST“用户”端点需要一个“ID”或“用户名”来返回有关特定用户的详细信息。

我的“登录”响应包含“用户名”,我可以用它来调用后续的用户端点(如果我知道怎么做的话)。

有人知道用户端点是如何工作的吗?基本上我需要这样称呼:

          user: {
            url: '/users/${userId}',
            method: 'get',
            propertyName: 'data'
          }

【问题讨论】:

  • 您能分享您的代理配置等吗?我也在尝试设置它,但不幸的是 API 路由对我来说不存在,而且我没有收到令牌。会很感激的

标签: javascript vue.js authentication vuex nuxt.js


【解决方案1】:

也遇到过这个问题。

我的解决方案:

  1. 将身份验证端点的 user 属性设置为 false
auth: { 
    strategies: {
      local: {
        endpoints: {
          // login api
          login: {  
            url: '/api/v1/users/login',
            method: 'post',
            propertyName: 'token'
          },
          // logout api
          logout: {
            url: '/api/v1/users/logout',
            method: 'post'
          },
          user: false // setting user fetch api to false
        },
        redirect: {
          login: '/login',
          logout: '/login',
          callback: '/login',
          home: '/'
        },
      }
    }
  },

  1. loginWith() 之后,您可以使用函数setUniversal(key, value, isJson) 保存获取的用户并使用函数getUniversal(key) 获取它
  async login(user) {
    await this.$auth.loginWith('local', {
      data: user
    }).then(res => {

      let user = res.data.data.user // getting user (yours can be different)
      this.$auth.$storage.setUniversal('user', user, true) // setting user in Vuex, cookies and localstorage

      user = this.$auth.$storage.getUniversal('user') // getting user (you can use it anywhere in your app)
      console.log(user) // checking user

      this.$router.push('/') // redirecting after login
    }).catch(err => {
      console.log(err.response)
    })
  }
  1. 就是这样,您的 uservuexcookieslocalstorage 中,您可以将其放入computed 像这样:
computed: {
  user() {
    return this.$auth.$storage.getUniversal('user');
  }
}

P.S: 退出,使用logout() 函数,并在回调中使用this.$auth.$storage.removeUniversal('user') 将其从everywhere

中删除

【讨论】:

    猜你喜欢
    • 2019-10-07
    • 1970-01-01
    • 2017-07-14
    • 1970-01-01
    • 2019-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-27
    相关资源
    最近更新 更多