代码之家  ›  专栏  ›  技术社区  ›  mayorsanmayor

在Rails 5.2应用程序和Golang之间共享web会话

  •  1
  • mayorsanmayor  · 技术社区  · 6 年前

    现在的问题是我们不知道如何在这两个应用程序之间共享web会话。在Rails应用程序和Golang之间切换时。就像从Gmail到googledrive再到YouTube一样,尽管这些应用程序运行在不同的子域中,有时使用不同的语言,但会话仍然是一样的。

    我可以将Rails+designe/Warden的会话添加到浏览器cookie中,但是cookie是加密的。如何解密或使用此cookie对Go中的用户进行身份验证?

    你们能和我分享一下你们如何在自己的应用程序中解决这个问题吗?

    使用这个 answer 我能够让会话cookie出现在React+Rails的主站点和React+Golang的子域中,但是cookie是加密的,我们如何解密/获取其中的值?例如用户id?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Tarek N. Elsamni    6 年前

    您可以使用 redis

    因此,每当您在中创建新会话时 Rails Go 应用程序:

    • 创建会话id(UUID for ex.) a59eb448-d268-413e-a837-b5aefc65a4b2
    • 您将在中存储会话详细信息 redis公司 a59eb448-d268-413e-a837-b5aefc65a4b2型 ).
    • rails.mydomain.com go.mydomain.com 然后您需要使cookie可以从两个子域访问 *.mydomain.com
    • 当具有此cookie的用户访问您的任何平台时。您可以从他的cookies中读取会话id,并使用它来查询redis和获取会话信息(用户id等)。

    通过这种方式,您可以使用cookies在客户端的不同子域之间共享会话,并使用redis在服务器端的不同后端之间共享会话。

        2
  •  1
  •   Guillermo    5 年前

    rails5session library :

    Readme

    使用rails会话密钥库(指定)创建加密实例 在config/secrets.yml中)

    encryption := rails5session.NewEncryption(
        secretKeyBase,
        cookieSalt,
        signedCookieSalt,
    )
    
    • 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)
    }