我有一个带有身份验证解析程序的Koa和GraphQL API,它会在响应Cookie中添加一个身份验证令牌。
我的API在http://localhost:3000
上运行,而我的前端在http://localhost:3001
上运行。为了完成这项工作,我需要在我的API请求中添加withCredentials
标志,并使用{ origin: false, credentials: true }
配置我的Koa / Cors选项。如果没有这些设置,我会收到一个CORS错误,我发现它很混乱,因为它们都在localhost
上,所以在技术上是相同的域......?
使用此API会有多个前端,需要在cookie中进行身份验证并获取身份验证令牌。当我将我的域名欺骗为http://app1.dev
& http://app2.dev
,都在http://localhost:3000
上调用API,在响应Cookie中设置了auth令牌,但浏览器不会像所有内容localhost
那样存储Cookie。
在我的API上,我使用@koa/cors
来配置我的角色,然后设置以下内容:
app.use(cors({ origin: false, credentials: true }))
在我的前端反应应用程序上,我有一个请求函数,我用于所有的GraphQL查询:
const request = query => {
const request = axios.create({
baseURL: apiUrl,
headers: {'X-apikey': apiKey},
withCredentials: true,
});
return request.post('/graphql', { query })
.then(res => res.data)
.catch(console.error)
}
为什么没有在浏览器中设置cookie?
编辑:更新了我的axios请求以创建axios实例并尝试设置withCredentials。我仍然没有在dev工具中看到我的请求中的凭证参数。我怀疑这可能是问题吗?