当前位置: 首页 > 面试题库 >

大猩猩会话不适用于客户的CORS

王念
2023-03-14
问题内容

我已经设置了Go rest api。并在登录时执行此操作:

session, _ := store.New(r, sessionId)
session.Options.MaxAge = 12 * 3600
err := session.Save(r, w)
//treat error

为了检查会话,我有这样的东西:

    session, err := store.Get(r, sessionId)
    //treat error
    if session.IsNew {
        http.Error(w, "Unauthorized session.", http.StatusUnauthorized)
        return
    }

如果我执行邮递员的请求,效果很好,但是当我从客户那里收到请求时,我会得到401。你们中的任何人是否经历过类似的事情?该商店是一个CookieStore。

我已经检查了ID,将sessionId变量替换为静态字符串。大猩猩会话使用大猩猩上下文注册一个新请求,当我这样做时,来自邮递员的请求context.data[r]不为空,但来自客户端的请求始终为空->始终为新会话。

https://github.com/gorilla/context/blob/master/context.go-第33行

它被称为

https://github.com/gorilla/sessions/blob/master/sessions.go-第122行

wich用于CookieStore.Get函数中

https://github.com/gorilla/sessions/blob/master/store.go-第77行

编辑1:对于客户端,我使用聚合物,我也尝试了xmlhttp。聚合物:

<iron-ajax
  id="ajaxRequest"
  auto
  url="{{requestUrl}}"
  headers="{{requestHeaders}}"
  handle-as="json"
  on-response="onResponse"
  on-error="onError"
  content-type="application/json"
  >
</iron-ajax>

和处理程序

  onResponse: function(response){
    console.log(response.detail.response);
    this.items = response.detail.response
  },
  onError: function(error){
    console.log(error.detail)
  },
  ready: function(){
    this.requestUrl = "http://localhost:8080/api/fingerprint/company/" + getCookie("companyId");
    this.requestHeaders = {"Set-cookie": getCookie("api_token")}
  }

并且cookie成功到达了后端。

和xmlhttp:

  var xmlhttp = new XMLHttpRequest();
  xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState == XMLHttpRequest.DONE ) {
      if(xmlhttp.status == 200){
        //do stuff
      }else if(xmlhttp.status == 401){
        page.redirect("/unauthorized")
      }else{
        page.redirect("/error")
      }
    }
  }

  xmlhttp.open("GET","http://localhost:8080/api/fingerprint/company/" + getCookie("companyId"),true);
  xmlhttp.setRequestHeader("Set-cookie", getCookie("api_token"));
  xmlhttp.send();

编辑2:

因此,我尝试使用fiddler调试(感谢您的建议),结果发现邮递员的请求有一个粗体条目Cookies / Login,而客户端的请求则没有。任何想法如何获得/设置该值?它是通过邮递员自动设置的。在身份验证请求中,我得到一个set-
cookie标头,其中包含我需要的所有数据,但无法在客户端上获取。我懂了Refused to get unsafe header set-cookie


问题答案:

问题在于,客户端需要具有请求withCredentials = true,然后浏览器才能处理所有内容。它从头获取cookie,set- cookie并通过cookie头发送cookie 。因此,毕竟这不是大猩猩会议的问题。



 类似资料:
  • 问题内容: 我正在使用Go创建一个简单的Web应用程序,用于会话和路由的大猩猩,以及用于模板的小胡子。我认为登录有问题,我认为这是IE接受Cookie的问题。该问题仅在Internet Explorer上出现,否则登录在Chrome中可以正常使用。这是我的代码: 使用IE登录时,由于会话值“ username”为nil,用户将被直接重定向回登录页面,而在Chrome中,正确定义了用户名并提供了索引

  • 问题内容: 使用大猩猩会话网络工具包时,不会跨请求维护会话变量。当我启动服务器并输入localhost:8100 /时,由于会话值不存在,页面被定向到login.html。登录后,我在商店中设置了会话变量,页面被重定向到home.html。但是,当我打开一个新选项卡并键入localhost:8100 /时,应使用已存储的会话变量将页面定向到home.html,但应将页面重定向到login.html

  • 大象与猩猩 是o2o平台全套解决方案,现将Wechat h5、android、iOS三套代码正式开源。

  • 来自WebSocket RFC的片段: 要使用状态代码(第7.4节)/code/和可选关闭原因(第7.1.6节)/reason/启动WebSocket关闭握手,endpoint必须发送关闭控制帧,如第5.5节所述。1,其状态代码设置为/code/,关闭原因设置为/reason/。一旦endpoint发送和接收到关闭控制帧,该endpoint应按照第7.1节中的定义关闭WebSocket连接。1.

  • 问题内容: 在用go编写的HTTP服务器中,我使用大猩猩/多路复用器进行路由, 我想使用(和/或其他“中间件”),但我不知道该在哪里放置它们。 明确说明: 我通过创建一个新的路由器 通过类似的电话添加我的路线 我通过和创建服务器 为此,我可以在哪里插入或任何其他中间件? 问题答案: 这是您可以执行的操作: 如果您有多个HTTP处理程序,则可以将它们堆叠起来:

  • 问题内容: 我想在路由中有一个可选的URL变量。我似乎找不到使用mux包的方法。这是我目前的路线: 网址为时可以使用。我希望它能够接受,即使没有输入也可以。有什么想法吗? 问题答案: 您可以为根路径定义一个新的: 并让函数执行该路径所需的任何操作。