我在Android上的Ionic 5 React应用程序中遇到了一个奇怪的问题。该应用程序登录到Drupal 8后端,并获得一个JWT令牌进行身份验证。
然而,在最近对我的应用程序和Drupal进行了一些更改后,该应用程序现在也获得了一个会话cookie(Drupal会话cookie)。这通常没问题,但当我退出应用程序时,
即使我看到会话cookie从cookie中删除:http://localhost在我的开发机器上的Chrome中
,当我尝试重新登录应用程序时,该应用程序正在使用Drupal会话cookie,这会导致错误:
{"message":"This route can only be accessed by anonymous users."}
.
显然,当我已经登录时,我不应该尝试登录。
但我的问题是——这个“鬼”饼干在哪里?登录应用程序后,在Chrome开发工具中,我可以在
应用程序->Cookie->http://localhost
,但当我注销应用程序时,此cookie会被删除。我检查了存储下的所有其他选项,也没有Cookie。
即使我关闭应用程序并重新打开它,当我尝试登录时,它也在使用此会话cookie,但我无法找出会话cookie的存储位置(它不在cookie或本地存储下)。
我可以通过卸载应用程序然后重新安装来“重置”所有内容。这将允许我登录一次,然后我会得到一个会话cookie(出现在应用程序->cookie->;http://localhost). 但是,当我注销应用程序并尝试重新登录时,我看到axios仍然有我的会话cookie(在注销时已从Chrome开发工具中清除),因此登录失败
This route can only be accessed by anonymous users
).
我如何清除这个幻影饼干,或者我如何至少看到饼干在哪里?
这是我的Ionic应用程序的登录代码:
export const login = async (email: string, password: string): Promise<void> => (
axios.post(`${baseUrl}/user/login?_format=json`, {
mail: email,
pass: password,
}, {
withCredentials: true,
}).then((response) => {
if (response.data.access_token) {
storageSet(jwtTokenName, response.data.access_token);
} else {
Promise.reject(Error('Could not fetch JWT token.'));
}
}));
更新
Ionic托管应用程序
http://localhost
。在我桌面上的Chrome开发工具中,在
应用程序->曲奇饼
,通常我只看到饼干
http://localhost
然而,如果我导航到我的应用程序中的一个页面,该页面有一个嵌入Drupal网站页面的iframe,那么我就会看到Drupal网站的会话cookie!所以至少我找到了幻影饼干。
所以现在我的问题是,
如何删除会话cookie,或者更好的是,如何从一开始就防止会话cookie被保存?