【发布时间】:2021-07-29 13:16:34
【问题描述】:
我在 Android 上的 Ionic 5 React 应用程序中遇到了一个奇怪的问题。该应用程序登录到 Drupal 8 后端并获取 JWT 令牌以进行身份验证。
但是,在最近对我的应用和 Drupal 进行了一些更改之后,该应用现在也获得了一个会话 cookie(Drupal 会话 cookie)。这通常没问题,但是当我退出应用程序时,即使我看到会话 cookie 已从 Cookies: http://localhost in Chrome on my dev machine 中删除,当我尝试重新登录应用,应用正在使用 Drupal 会话 cookie,导致错误:{"message":"This route can only be accessed by anonymous users."}。
显然,当我已经登录时,我不应该尝试登录。
但我的问题是——这个“幽灵”饼干在哪里?登录应用程序后,在Chrome开发工具中,我可以在Application->Cookies->http://localhost看到会话cookie,但是当我在应用程序中注销时,这个cookie被删除。我检查了存储下的所有其他选项,那里也没有 cookie。
即使我关闭应用程序并重新打开它,当我尝试登录时,它仍在使用此会话 cookie,但我无法确定该会话 cookie 的存储位置(它不在 Cookies 或 Local 下存储)。
我可以通过卸载应用程序然后重新安装来“重置”所有内容。这将允许我登录一次,并获得一个会话 cookie(出现在 Application -> Cookies-> http://localhost 中)。但是当我退出应用程序并尝试重新登录时,我发现 axios 仍然有我的会话 cookie(退出时已从 Chrome 开发工具中清除),因此登录失败 This route can only be accessed by anonymous users)。
我怎样才能清除这个幻像 cookie,或者我怎样才能至少看到 cookie 在哪里?
这是我的 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 开发工具中,在 Application -> Cookies 下,通常我只能看到 http://localhost 的 cookie。但是,如果我导航到我的应用程序中的一个页面,该页面有一个 iframe,该 iframe 嵌入了我的 Drupal 站点的页面,然后我会看到 Drupal 站点的会话 cookie!所以至少我找到了幻影饼干。
所以现在我的问题是,我如何删除会话 cookie,或者更好的是,我首先如何防止会话 cookie 被保存?
【问题讨论】:
标签: android ionic-framework axios session-cookies ionic5