Nuxt Auth 模块经过身份验证的用户数据

Posted

技术标签:

【中文标题】Nuxt Auth 模块经过身份验证的用户数据【英文标题】:Nuxt Auth Module Authenticated User Data 【发布时间】:2018-09-30 11:30:10 【问题描述】:

我有一个用于登录用户的 API api/auth。它希望收到一个 access_token(作为 URL 查询、来自标头或来自请求正文)、一个 username 和一个 password .我一直在使用 Vue Chrome 开发者工具,即使我从服务器收到 201 响应,auth.loggedIn 状态仍然是错误的。我认为这可能是我在nuxt.config.js 上的redirect 路径无法正常工作的原因。谁能指出我为什么它不起作用的正确方向?

这是 Vue Chrome 开发者工具的截图

这是服务器登录后的JSON响应。这里的token和上面提到的access_token不同。


    "token": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
    "user": 
        "user_name": "xxxxxxxxxxxxxxxxxx",
        "uid": "xxxxxxxxxxxxxxxxxx",
        "user_data": "XXXXXXXXXXXXXXXXXXXXXXXXX"
    

这里是nuxt.config.js的相关部分

export default 
  modules: [
    '@nuxtjs/axios',
    '@nuxtjs/auth',
    ['bootstrap-vue/nuxt',  css: false ]
  ],
  router: 
    middleware: [ 'auth' ]
  ,
  auth: 
    strategies: 
      local: 
        endpoints: 
          login: 
            url: '/api/auth?access_token=XXXXXXXXXXXXXXXXXXXXXX',
            method: 'post',
            propertyName: 'token'
          ,
          logout: 
            url: '/api/auth/logout',
            method: 'post'
          ,
          user: 
            url: '/api/users/me',
            method: 'get',
            propertyName: 'user'
          
        
      
    ,
    redirect: 
      login: '/',
      logout: '/',
      home: '/home'
    ,
    token: 
      name: 'token'
    ,
    cookie: 
      name: 'token'
    ,
    rewriteRedirects: true
  ,
  axios: 
    baseURL: 'http://localhost:9000/'
  

还有我的store/index.js

export const state = () => (
  authUser: null
)

export const mutations = 
  SET_USER: function (state, user) 
    state.authUser = user
  


export const actions = 
  nuxtServerInit ( commit ,  req ) 
    if (req.session && req.user) 
      commit('SET_USER', req.user)
    
  ,

  async login ( commit ,  username, password ) 
    const auth = 
      username: username,
      password: password
    

    try 
      const  user  = this.$auth.loginWith('local',  auth )
      commit('SET_USER', user)
     catch (err) 
      console.error(err)
    
  

商店中的登录动作是由页面中的这个方法触发的:

export default 
  auth: false,
  methods: 
    async login () 
      try 
        await this.$store.dispatch('login', 
          username: this.form.email,
          password: this.form.password
        )
       catch (err) 
        this.alert.status = true
        this.alert.type = 'danger'
        this.alert.response = err
      
    
  

附:我意识到我在 URL 中明确包含了access_token。目前,我不知道在 Nuxt Auth 模块中可以在哪里设置 master_key 等。

【问题讨论】:

也许这篇文章对你有帮助medium.com/@anas.mammeri/… 【参考方案1】:

在你的 store/index.js 中试试这个

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

const store = () => new Vuex.Store(
  state: 
    authUser: null
  ,
  mutations: 
    SET_USER: function (state, user) 
      state.authUser = user
    
  ,
  actions: 
    CHECK_AUTH: function(token, router) 
      if (token === null) 
        router.push('/login')
      
    
  
)
export default store

对于路由器,这应该在全局范围内工作:

$nuxt._router.push('/')

【讨论】:

以上是关于Nuxt Auth 模块经过身份验证的用户数据的主要内容,如果未能解决你的问题,请参考以下文章

浏览器刷新后 Nuxt auth 用户重置

为啥在 nuxt-auth-next 中进行 google 授权后用户未通过身份验证?

nuxt/auth 如何真正安全?

没有用户端点的 Nuxt 身份验证

Laravel 5.3 Auth 外观正在更改为默认的经过身份验证的用户

Nuxt JS 中的基本身份验证