[英]can't set authorization on header request?
i already have this code on my express server:我的快递服务器上已经有这段代码:
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Authorization");
next();
});
app.use('/graphql', graphqlExpress(async(req) => {
let {user} = await getUser(req.headers.authorization);
return ({
schema,
pretty: true,
graphiql: true,
context: {
user
}
})
}))
I thought it was cors problem so I followed from this tutorial in enable-cors for express: https://enable-cors.org/server_expressjs.html我认为这是 cors 问题,所以我按照本教程中的 enable-cors for express 进行操作: https ://enable-cors.org/server_expressjs.html
This code is how i process fetching:这段代码是我处理抓取的方式:
let token = localStorage.getItem('token');
const fetchQuery = (operation, variables) => {
return fetch('/graphql', {
method: 'POST',
credentials: 'same-origin',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
'Authorization': token,
},
body: JSON.stringify({query: operation.text, variables})
}).then(response => {
// A better error message for request timeouts
if (response.status === 504) {
return Promise.reject({
error: {
message: 'Request timed out'
}
})
}
return response.json()
}).then(responseJson => {
// https://github.com/facebook/relay/issues/1816
// https://github.com/facebook/relay/issues/1913
if (responseJson.errors) {
return Promise.reject(responseJson.errors[0])
}
return Promise.resolve(responseJson)
})
}
But, even though there's already a token after a user logs in, the authorization sent to server is always null?但是,即使用户登录后已经有令牌,发送到服务器的授权始终为空?
localStorage.getItem("token")
is not executing, probably due to getItem
being an I/O operation, and how exporting works. localStorage.getItem("token")
未执行,可能是由于getItem
是 I/O 操作,以及导出的工作方式。 Move it inside fetchQuery
将它fetchQuery
const fetchQuery = (operation, variables) => {
const token = localStorage.getItem("token");
return fetch('/graphql', {
method: 'POST',
credentials: 'same-origin',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
'Authorization': token,
},
body: JSON.stringify({query: operation.text, variables})
}).then(response => {
// A better error message for request timeouts
if (response.status === 504) {
return Promise.reject({
error: {
message: 'Request timed out'
}
})
}
return response.json()
}).then(responseJson => {
// https://github.com/facebook/relay/issues/1816
// https://github.com/facebook/relay/issues/1913
if (responseJson.errors) {
return Promise.reject(responseJson.errors[0])
}
return Promise.resolve(responseJson)
})
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.