对于Angular应用程序,我需要对Laravel后端进行一些API调用,该后端必须在PHP会话中临时存储一些数据。 Angular应用程序运行在http://localhost:4200
上,而Laravel后端运行在本地.test
域上。为了使Laravel会话cookie能够跨域工作,我必须在本地将credentials
选项设置为include
。尽管生产环境中将不需要它们,因为它们都将在同一个域中运行。
要解决这个问题,我想在我的环境文件中使用一个设置(我在本地有一个,用于生产的是一个)。但是,当我简单地将credentials: environment.credentials
(credentials
中的environment
在本地设置为include
,将same-origin
用于生产)添加到fetch
调用中时,我收到错误Types of property 'credentials' are incompatible. Type 'string' is not assignable to type 'RequestCredentials'
,这是有道理的。要解决此问题,我可以将其更改为credentials: environment.credentials === 'include' ? 'include' : 'same-origin'
(有效),但这似乎是不必要的额外检查,是否有更好/更简单的方法来动态设置此值,或者是否可以强制转换{{1 }}到string
?
作为参考,我的提取调用看起来像这样的atm:
RequestCredentials
答案 0 :(得分:2)
environment.credentials
是一个字符串,而凭据是RequestCredentials
。但是,您可以像这样将字符串转换为RequestCredentials
:
const url = environment.apiUrl + '/slug/';
const response = await fetch(url, {
method: 'POST',
credentials: environment.credentials as RequestCredentials,
headers: {
'Content-Type': 'application/json'
},
body: ...
});