Strapi:GraphQL ctx.state 未定义
Strapi: GraphQL ctx.state is undefined
我有一个自定义控制器来替换名为“groupedOrders”的默认查询
但是当我尝试测试查询时,响应是
"message": "Cannot read property 'user' of undefined",
api/grouped-order/controllers/grouped-order.js 中的代码是:
module.exports = {
byUser: async ctx => {
const user = ctx.state.user
const resTypeUser = await strapi.query('tipo-usuario').find({ _id: user.tipo_usuario })
var resGroupedOrder = { error: true }
if (resTypeUser[0].super_admin) {
resGroupedOrder = await strapi.query('grouped-order').find()
} else if (resTypeUser[0].cliente) {
resGroupedOrder = await strapi.query('grouped-order').find({ users_permissions_user: user._id })
}
return resGroupedOrder
}
};
api/grouped-order/config/schema.graphql.js中的代码是:
module.exports = {
definition: ``,
query: ``,
type: {},
resolver: {
Query: {
groupedOrders: {
description: "Retornar todos los pedidos dependiendo el tipo de usuario",
resolverOf: "application::grouped-order.grouped-order.byUser",
policies: [
'plugins::users-permissions.permissions',
],
resolver: async (obj, options, ctx) => {
return await strapi.controllers["grouped-order"].byUser(ctx);
}
}
},
},
}
我在 http://localhost:1337/graphql 中尝试 运行 的测试是:
query groupedOrders($where:JSON){
groupedOrders(where:$where){
createdAt
detail
status
}
}
和 HTTP HEADERS:
{
"Authorization": "Bearer TOKENJWT"
}
已解决,我只需在我的控制器上添加此代码:
if (!ctx.state && ctx.request && ctx.request.header && ctx.request.header.authorization) {
const { id } = await strapi.plugins["users-permissions"].services.jwt.getToken(ctx);
ctx.state.user = await strapi.plugins['users-permissions'].services.user.fetchAuthenticatedUser(id);
}
我们可以全局添加代码,像这样:https://github.com/strapi/strapi/issues/9159#issuecomment-789484109
我有一个自定义控制器来替换名为“groupedOrders”的默认查询 但是当我尝试测试查询时,响应是
"message": "Cannot read property 'user' of undefined",
api/grouped-order/controllers/grouped-order.js 中的代码是:
module.exports = {
byUser: async ctx => {
const user = ctx.state.user
const resTypeUser = await strapi.query('tipo-usuario').find({ _id: user.tipo_usuario })
var resGroupedOrder = { error: true }
if (resTypeUser[0].super_admin) {
resGroupedOrder = await strapi.query('grouped-order').find()
} else if (resTypeUser[0].cliente) {
resGroupedOrder = await strapi.query('grouped-order').find({ users_permissions_user: user._id })
}
return resGroupedOrder
}
};
api/grouped-order/config/schema.graphql.js中的代码是:
module.exports = {
definition: ``,
query: ``,
type: {},
resolver: {
Query: {
groupedOrders: {
description: "Retornar todos los pedidos dependiendo el tipo de usuario",
resolverOf: "application::grouped-order.grouped-order.byUser",
policies: [
'plugins::users-permissions.permissions',
],
resolver: async (obj, options, ctx) => {
return await strapi.controllers["grouped-order"].byUser(ctx);
}
}
},
},
}
我在 http://localhost:1337/graphql 中尝试 运行 的测试是:
query groupedOrders($where:JSON){
groupedOrders(where:$where){
createdAt
detail
status
}
}
和 HTTP HEADERS:
{
"Authorization": "Bearer TOKENJWT"
}
已解决,我只需在我的控制器上添加此代码:
if (!ctx.state && ctx.request && ctx.request.header && ctx.request.header.authorization) {
const { id } = await strapi.plugins["users-permissions"].services.jwt.getToken(ctx);
ctx.state.user = await strapi.plugins['users-permissions'].services.user.fetchAuthenticatedUser(id);
}
我们可以全局添加代码,像这样:https://github.com/strapi/strapi/issues/9159#issuecomment-789484109