【问题标题】:Wait for CORS cookie to be set before location.href redirect等待在 location.href 重定向之前设置 CORS cookie
【发布时间】:2020-07-27 00:37:20
【问题描述】:

我正在尝试创建一个跨多个域(由我控制)持续存在的登录。我的策略是,在成功的登录响应后,我发送一个 CORS 请求来获取其他每个所需域的 cookie。在返回 cookie 时,我会重定向到用户的主页(可能在任何域上)

如果我注释掉重定向,我发现一切正常:所有 CORS cookie 均已设置,并且我已在其他域登录。但是,当我重定向时,有时未设置 CORS cookie。这是我在客户端的代码的总体思路:

    // This is running client side when the user visits "A.com/index.html"
    // PLEASE NOTE: the distinction between A.com and B.com is important

     $.post('https://A.com/attemptLogin', function(data) {
        if (!data.success) { return; }
        var token = data.loginToken;
        var userURL = data.userURL; // userURL may be in A.com or B.com...
        // now get a cookie at the alternate domain B.com
        $.ajax({
            url: 'http://B.com/getDomainCookie/' + token,
            method: 'GET',
            xhrFields: { withCredentials: true },
            success: function() {
                // if I comment out the next line, the cookie is always set successfully
                // if I leave the line in, it is hit or miss whether the cookie is set.
                location.href = userURL;
            }
        });
    });

我的猜测是ajax回调是在浏览器完成cookie设置之前触发的,可能与它是B.com cookie有关,而这段代码是在A.com上运行的。

感谢任何帮助。这是我发布的第一个问题,因此也感谢对问题礼仪和格式的建设性批评!

【问题讨论】:

  • 明确一点,对'http://B.com/getDomainCookie/' + token的GET请求应该设置cookie然后返回?如果这是您想要的,那么我认为您的问题出在 B 端,其中异步函数设置 cookie 并返回响应。有可能吗?
  • @cventr,是的,对 B.com 的 GET 纯粹是为了设置 cookie。返回仅包含 OK 响应和 B.com 域的 cookie。至于B端的async,我不太清楚你的意思……我控制B.com/getDomainCookie另一端的服务器,它肯定会返回我想要的响应。
  • 好的,我看不到 B 端的内容,所以我只是想猜测:您确定在设置 cookie 后立即返回响应吗?因为您使用的函数可能是异步的,并且在实际设置 cookie 之前返回响应
  • @cventr,我觉得不是这样,因为如果我留在页面上,cookie 总是被设置的。但为了彻底一点,我可以告诉你,/getDomainCookie 后面的(node express style )端点以这样的两行结尾:res.cookie('name', 'value'); return res.send(200); 字面意思是一行接一行,所以应该始终设置 cookie。
  • 如果cookie在返回200状态之前写入成功,可以不测试B面吗?

标签: javascript jquery cookies browser cross-domain


【解决方案1】:

我设置了 50 毫秒的延迟 window.setTimeout(function() { location.href='';}, 50); 让它有一点空闲时间来存储 cookie。另一方面,在隐身窗口中似乎根本不起作用,丢弃所有 CORS cookie。

【讨论】:

    猜你喜欢
    • 2010-11-02
    • 1970-01-01
    • 2013-01-07
    • 2014-07-14
    • 2021-08-04
    • 1970-01-01
    • 2018-10-21
    • 2022-11-12
    • 1970-01-01
    相关资源
    最近更新 更多