ScopeKey在nuxt.js身份验证模块中不起作用

时间:2019-08-03 18:56:06

标签: javascript vue.js vuex nuxt.js

最近,我开始学习如何使用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文件中将“ scope”赋予“ scopeKey”属性?

编辑:

我尝试将其移到auth对象中或删除该属性,但我在$auth.hasScope('admin')$auth.hasScope('user')上仍得到false,这意味着scopeKey仍未定义,我不确定为什么

3 个答案:

答案 0 :(得分:0)

timer->start(1000);不应放置在scopeKey: 'scope'对象中。

将其直接放在strategies对象中。

看看default config

P.S。您甚至可以从auth配置对象中删除此属性,因为auth'scope'的默认值。

答案 1 :(得分:0)

scopeKey默认为'scope'。您无需再次设置。

对我来说,它是通过服务器端更改来完成的。

当我将字符串值放到作用域中时,它不起作用

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

但是当我将其更改为数组时,$auth.hasScope('admin')可以工作;

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

希望有帮助。

答案 2 :(得分:0)

不知何故,hasScope() 对我也不起作用,所以我直接检查了用户对象,我的响应中也有令牌。 我的响应中有一个 type 变量,它告诉我用户是管理员还是其他人。

将此添加到您的中间件

export default function ({ $auth, redirect }) {

    if (!$auth.loggedIn) {
        return redirect('/')
    }
    if ($auth.user.type != 'Super Admin') {  // Super Admin or whatever the user you want to check
        return redirect('/')
    }
}