亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Rails 5.2 應用程序和 Golang 之間共享網絡會話

在 Rails 5.2 應用程序和 Golang 之間共享網絡會話

Go
鳳凰求蠱 2023-04-17 16:22:30
我們有一個 Rails 應用程序作為主站點,但我們在 Golang 中創建了一個單獨的應用程序來處理許多其他實時功能,例如視頻和音頻呼叫、消息傳遞和白板部分。我們現在遇到的問題是我們不知道如何在兩個應用程序之間共享網絡會話。當您在 Rails 應用程序和 Golang 之間切換時。就像從 Gmail 到 Google Drive 再到 YouTube 一樣,會話保持不變,即使這些應用程序運行在不同的子域中,有時甚至使用不同的語言。我能夠將來自 Rails + Devise/Warden 的會話添加到瀏覽器 cookie 中,但 cookie 是加密的。我如何解密或使用此 cookie 來驗證 Go 中的用戶?你們能和我分享一下你們將如何在自己的應用程序中解決這個問題嗎?使用這個答案,我能夠讓會話 cookie 出現在 React + Rails 的主站點和 React + Golang 的子域中,但是 cookie 是加密的,我們如何解密/獲取其中的值?例如 user_id?
查看完整描述

2 回答

?
心有法竹

TA貢獻1866條經驗 獲得超5個贊

您應該嘗試使用rails5session 庫:

從自述文件:

使用您的 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)

}


查看完整回答
反對 回復 2023-04-17
?
慕無忌1623718

TA貢獻1744條經驗 獲得超4個贊

redis您可以使用數據存儲作為中央共享內存在兩個后端(無論后端如何)之間共享會話。

Rails因此,每當您在或應用程序中創建新會話時Go

  • 創建會話 ID(例如 UUID)a59eb448-d268-413e-a837-b5aefc65a4b2

  • redis您將使用該唯一會話 ID ( )存儲您的會話詳細信息a59eb448-d268-413e-a837-b5aefc65a4b2。

  • 您將會話 ID 存儲在兩個平臺域之間共享的 cookie 中。因此,如果是rails.mydomain.comgo.mydomain.com那么您需要使 cookie 可以從兩個子域訪問*.mydomain.com。

  • 當具有此 cookie 的用戶訪問您的任何平臺時。你可以從他的 cookie 中讀取 session-id 并用它來查詢 redis 并獲取會話信息(user_id 等)。

通過這種方式,您可以使用 cookie 在客戶端的不同子域之間共享會話,并使用 redis 在服務器端的不同后端共享。


查看完整回答
反對 回復 2023-04-17
  • 2 回答
  • 0 關注
  • 128 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號