最近,我开始学习如何使用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
仍未定义,我不确定为什么
答案 0 :(得分:0)
timer->start(1000);
不应放置在scopeKey: 'scope'
对象中。
将其直接放在strategies
对象中。
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('/')
}
}