我们有一个 Rails 应用程序作为主站点,但我们在 Golang 中创建了一个单独的应用程序来处理许多其他实时功能,例如视频和音频调用、消息传递和白板部分。
我们现在遇到的问题是我们不知道如何在两个应用程序之间共享网络 session 。当您在 Rails 应用程序和 Golang 之间切换时。就像从 Gmail 到 Google 云端硬盘再到 YouTube 一样, session 保持不变,即使这些应用程序在不同的子域中运行,有时甚至使用不同的语言。
我能够将来自 Rails + Devise/Warden 的 session 添加到浏览器 cookie 中,但 cookie 是加密的。我如何解密或使用此 cookie 来验证 Go 中的用户?
你们能否与我分享你们将如何在自己的应用中解决这个问题?
使用这个 answer我能够让 session cookie 出现在 React + Rails 的主站点和 React + Golang 的子域中,但是 cookie 是加密的,我们如何解密/获取其中的值?例如 user_id?
最佳答案
你应该试试rails5session library :
来自Readme :
使用您的 Rails session keystore 创建加密实例(指定 在 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,它会返回解密的 byte slice 如果有错误。
data, err := rails5session.VerifyAndDecryptCookieSession(encryption, cookie)
if err != nil {
panic(err)
}
关于ruby-on-rails - 在 Rails 5.2 应用程序和 Golang 之间共享网络 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52656437/