【问题标题】:ScopeKey doesn't work in nuxt.js auth moduleScopeKey 在 nuxt.js auth 模块中不起作用
【发布时间】:2019-12-11 22:56:37
【问题描述】:

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

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

我已尝试使用

设置范围
scopeKey: 'scope'

但是当我使用

进行检查时,我发现范围是“未定义”/“null”
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 仍然未定义,我不知道为什么。

【问题讨论】:

    标签: javascript vue.js vuex nuxt.js


    【解决方案1】:

    scopeKey 默认为 'scope'。无需重新设置。

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

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

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

    但是当我将其更改为数组时,$auth.hasScope('admin') 有效;

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

    希望对你有帮助。

    【讨论】:

      【解决方案2】:

      scopeKey: 'scope' 不应放在 strategies 对象内。

      直接放在auth对象中。

      看看default config

      附:你甚至可以从你的auth 配置对象中删除这个属性,因为'scope'scopeKey 的默认值。

      【讨论】:

      • 我已经尝试将它移动到 auth 对象内或删除该属性,但我仍然在 $auth.hasScope('admin')$auth.hasScope('user') 上得到错误,这意味着 scopeKey 仍然未定义,我不确定为什么。
      • 对我来说,它通过将它移动到 auth 对象中来工作。非常感谢它解决了我的问题!
      【解决方案3】:

      不知何故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('/')
          }
      }
      

      【讨论】:

      • 请注意,user.scope 必须是一个数组,hasScope 才能工作,假设您的 scopeKey 是默认调用范围。
      猜你喜欢
      • 2019-07-22
      • 2019-05-10
      • 2021-02-03
      • 1970-01-01
      • 2020-11-05
      • 2021-05-04
      • 1970-01-01
      • 2018-12-02
      • 2018-06-27
      相关资源
      最近更新 更多