首页 > 解决方案 > ScopeKey 在 nuxt.js auth 模块中不起作用

问题描述

最近我开始学习如何使用 Nuxtjs,在学习如何使用它的 Auth 模块时遇到了一个问题。

我能够登录并且我想检查帐户的范围,我尝试使用“Auth”的“scopeKey”属性来进行。从后端我从数据库中获得“范围”,它可以是“用户”或“管理员”。

我试图设置范围

scopeKey: 'scope'

但是我在检查时发现范围是“未定义”/“空”

this.$auth.hasScope('admin') / this.$auth.hasScope('user')

或“this.$auth.hasScope(admin)”将“scopeKey”设置为时返回一个空值

scopeKey: 'data.scope'

或者

scopeKey: 'user.scope'

这是我的身份验证策略:

auth: {
    strategies: {
      local: {
        scopeKey: 'scope',
        endpoints: {
          login: {
            url: 'api/auth/login',
            method: 'post',
            propertyName: 'token',
          },
          logout: {
            url: 'api/auth/logout',
            method: 'get'
          },
          user: {
            url: 'api/me',
            method: 'get',
            propertyName: data
          }
        }
      }
    },
    redirect: {
      login: '/auth/login',
      logout: '/',
      callback: '/auth/login',
      home: '/dash/'
    }
  }

这是我登录时auth模块读取的json示例:

"data": {
        "id": 2,
        "name": "test1",
        "email": "test@test.com",
        "email_verified_at": null,
        "scope": "admin",
        "created_at": "2019-08-01 13:11:49",
        "updated_at": "2019-08-01 13:11:49"
    },

我可以访问前端页面上的范围值

$auth.user.scope

或与

$auth.$state.user.scope

但是如何在设置“auth”属性/策略时将“范围”赋予 nuxt.config.js 文件中的“scopeKey”属性?

编辑:

我已经尝试将它移动到 auth 对象中或删除该属性,但我仍然得到错误$auth.hasScope('admin')$auth.hasScope('user')这意味着scopeKey仍然未定义,我不知道为什么。

标签: javascriptvue.jsvuexnuxt.js

解决方案


默认情况下,scopeKey 是“范围”。您无需再次设置。

对我来说,它通过进行服务器端更改来工作。

当我将字符串值放入范围时,它不起作用

$data['scope'] = "admin";

但是当我把它改成数组时,就$auth.hasScope('admin')可以了;

$data['scope'] = array("admin", "test");

希望能帮助到你。


推荐阅读