Etherpad-lite: 将 sessionID 从一个域转移到另一个域

创建于 2020-06-19  ·  6评论  ·  资料来源: ether/etherpad-lite

嗨,大家好! 关于如何将sessionID从一个域传输到另一个域并将其写入客户端 cookie 的任何想法?

域号 1 - 一般站点
域号 2 - etherpad

有一个ep_auth_session插件,但它在我的情况下不起作用(_您无权访问此 pad_),因为我使用以下设置:

{
  "ip": "127.0.0.1",
  "trustProxy": true,
  "requireSession": true
}

加上 proxy_pass

Question

所有6条评论

我猜在站点 a 上有一些逻辑,当最初进行会话时,它会将 sessionID 发布到 etherpad。 需要 Etherpad 中的插件。

@JohnMcLear来自域名 1,我们无法在域名 2 上设置 cookie

cookie 必须直接设置在域号 2 上

有没有这样的插件或者需要开发?

它需要被开发。 看看我如何在 ep_what_have_i_missed 中设置 cookie

它需要被开发。 看看我如何在 ep_what_have_i_missed 中设置 cookie

https://github.com/ether/ep_what_have_i_missed 404 未找到

我们有类似的东西。 在我们的例子中,我们有一个主页,它是一个包装 Etherpad 编辑器的 iframe。
我不知道这是不是你的情况,如果是这样,这些片段可能会有所帮助。

从包装器通过 PostMessage 发送消息

Window.postMessage(message, '*')

监听来自外部的 API 调用(Etherpad 插件)

var _listenToAPICallsToSetSessionOnCookie = function() {
  // listen to outbound calls of this API
  window.addEventListener('message', function(e) {
      ... check the content of 'e'
      setSessionOnCookie(e.data.sessionID, e.data.expires)
    }
  });
}

添加会话 ID(Etherpad 插件)

var setSessionOnCookie = function(sessionID, expires) {
  var existingSessionIDs = getSessionID(); // get existent sessions id
  var sessionIDAlreadyStored = existingSessionIDs.indexOf(sessionID) !== -1;

  if (!sessionIDAlreadyStored) {
    // need to append new session id to the end of existing list
    var allSessionIDs = existingSessionIDs.length ? existingSessionIDs + ',' : '';
    allSessionIDs += sessionID;

    // include expiration, if provided
    var expiration = expires ? ';expires=' + (new Date(expires).toUTCString()) : '';

    document.cookie = 'sessionID=' + allSessionIDs + expiration + ';secure';
  }
}

有关 postMessage API 的更多信息
https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

dessalines picture dessalines  ·  7评论

muxator picture muxator  ·  7评论

Pita picture Pita  ·  7评论

g4rf picture g4rf  ·  5评论

BenBE picture BenBE  ·  5评论