我们有一个Rails应用程序作为主站点,但是我们在Golang中创建了一个单独的应用程序,该应用程序可以处理许多其他实时功能,例如视频和音频呼叫,消息传递和白板部分。
我们现在遇到的问题是,我们不知道如何在两个应用程序之间共享Web会话。在Rails应用和Golang之间切换时。就像从Gmail到Google云端硬盘再到YouTube一样,会话仍保持不变,即使这些应用程序以不同的子域(有时甚至是不同的语言)运行。
我能够将Rails + Devise / Warden中的会话添加到浏览器cookie中,但是该cookie是加密的。如何在Go中解密或使用此Cookie验证用户身份?
你们能和我分享一下您将如何在自己的应用中解决此问题的方法吗?
使用此answer,我可以使会话cookie既出现在React + Rails的主站点中,又出现在React + Golang的子域中,但是cookie是经过加密的,我们如何解密/获取那里的价值?例如user_id?
答案 0 :(得分:1)
您可以使用TextObject text =(TextObject)CrystalReport21.ReportDefinition.Sections["Section3"].ReportObjects["Text19"];
text.Text = comboBox2.Text;
crystalReportViewer1.ReportSource = name your crystalreport;
crystalReportViewer1.Refresh();
数据存储区作为中央共享内存在两个后端(无论后端)之间共享会话。
因此,每当您在redis
或Rails
应用中创建新会话时:
Go
a59eb448-d268-413e-a837-b5aefc65a4b2
)将会话详细信息存储在redis
中。a59eb448-d268-413e-a837-b5aefc65a4b2
和rails.mydomain.com
,则需要使cookie可以从两个子域go.mydomain.com
访问。这样,您可以使用Cookie在客户端的不同子域之间共享会话,并使用Redis在服务器端的不同后端之间共享会话。
答案 1 :(得分:1)
您应该尝试尝试rails5session library:
来自Readme:
使用Rails会话秘密密钥库创建加密实例(指定 在config / secrets.yml中)
encryption := rails5session.NewEncryption(
secretKeyBase,
cookieSalt,
signedCookieSalt,
)
您可以通过运行以下Ruby代码获取cookieSalt:
Rails.application.encryption.action_dispatch.encrypted_cookie_salt
您可以通过运行以下Ruby代码来获取您的signedCookieSalt:
Rails.application.encryption.action_dispatch.encrypted_signed_cookie_salt
然后验证并解密用户的cookie,它将返回解密的字节片 和错误(如果有)。
data, err := rails5session.VerifyAndDecryptCookieSession(encryption, cookie)
if err != nil {
panic(err)
}