强制在 angular 的路由器之外处理相同的域链接
Forcing same domain links to be handled outside of angular's router
我们有一个 angular 应用程序托管在域的根目录下,比如说:
example.com
我们在 /api 虚拟目录中有一个 mvc.net api 运行:
example.com/api
我们在 api 的 web.config 中重写了规则,以允许调用 /api,这工作正常,因为我们的 xhr 调用正在工作。
为了进行身份验证,我们必须将浏览器路由到 example.com/api/auth/whatever,这样它就可以适当地 302 到身份验证提供程序。一旦用户通过身份验证,他们将被路由回我们的 API,然后返回到 angular 应用程序。
这一切在开发中都没有问题,因为从技术上讲,一切都在不同的域中(locahost:4200、4201 等)。一旦部署在同一个域上,angular 路由器就会开始拦截 auth link 点击,并在没有匹配的路由时路由到 catch all 路由。
我已经尝试将 target="_self" 添加到 links,正如我看到其他人推荐的那样,但这并没有改变行为。
有没有办法强制 angular 不处理路由,或者提供一些拦截路由的守卫,让浏览器处理它?
我在 chrome 开发工具的帮助下解决了这个问题,
我们正在使用 angular pwa 包,我查看了网络日志,显示 service worker 正在从缓存中为 URL 提供服务(在本例中是错误的)。我们在 ngsw.json 中添加了以下条目:
"dataGroups":[
{
"name": "api",
"urls": ["/api"],
"cacheConfig": {
"maxSize": 0,
"maxAge": "0u",
"strategy": "freshness"
}
}
]
现在所有 api 调用都不再缓存。我们可能会进一步将其优化为仅我们的身份验证 url,但目前这是有效的。
我们有一个 angular 应用程序托管在域的根目录下,比如说:
example.com
我们在 /api 虚拟目录中有一个 mvc.net api 运行:
example.com/api
我们在 api 的 web.config 中重写了规则,以允许调用 /api,这工作正常,因为我们的 xhr 调用正在工作。
为了进行身份验证,我们必须将浏览器路由到 example.com/api/auth/whatever,这样它就可以适当地 302 到身份验证提供程序。一旦用户通过身份验证,他们将被路由回我们的 API,然后返回到 angular 应用程序。
这一切在开发中都没有问题,因为从技术上讲,一切都在不同的域中(locahost:4200、4201 等)。一旦部署在同一个域上,angular 路由器就会开始拦截 auth link 点击,并在没有匹配的路由时路由到 catch all 路由。
我已经尝试将 target="_self" 添加到 links,正如我看到其他人推荐的那样,但这并没有改变行为。
有没有办法强制 angular 不处理路由,或者提供一些拦截路由的守卫,让浏览器处理它?
我在 chrome 开发工具的帮助下解决了这个问题,
我们正在使用 angular pwa 包,我查看了网络日志,显示 service worker 正在从缓存中为 URL 提供服务(在本例中是错误的)。我们在 ngsw.json 中添加了以下条目:
"dataGroups":[
{
"name": "api",
"urls": ["/api"],
"cacheConfig": {
"maxSize": 0,
"maxAge": "0u",
"strategy": "freshness"
}
}
]
现在所有 api 调用都不再缓存。我们可能会进一步将其优化为仅我们的身份验证 url,但目前这是有效的。