慕碼人8056858
2021-11-15 20:57:20
我正在嘗試使用 Golang 和 Angular JS 構建一個非常簡單的 Web 應用程序(用于學習目的)。我對 Go 和 AngularJS 代碼很滿意,但在嘗試創建合適的 API 結構時遇到了困難。目前,我將所有運行應用程序的代碼和 API 代碼捆綁在一起。理想情況下,我想將其分開,這樣我就可以讓我的應用程序在 app.mything.com 等子域上運行,而 API 在 api.mything.com 上運行我的問題是我的 API 有 MYSQL 調用,例如 -select * FROM sometable where userid = userIDuserID 是保存在會話中的用戶 ID。因此,雖然所有代碼都捆綁在一起,但這是可能的并且工作正常。如果我要將代碼分離到兩個單獨的子域,則這兩個域都無法訪問會話。怎么可能實現這樣的目標?
2 回答

飲歌長嘯
TA貢獻1951條經驗 獲得超3個贊
您仍然可以訪問用戶 ID。
您在 api.domain.com 上的 API 服務器可以在登錄時將 ID 保存在會話 cookie 中。cookie 將用于
api.domain.com
域。默認情況下使用gorilla/sessions來獲取簽名的 cookie。www.example.com
由于瀏覽器對 cookie 強制執行的同源策略,(不同域)上的 Angular 客戶端將根本無法讀取/寫入cookie,但仍會在 AJAX 請求中將 cookie 發送回api.domain.com
服務器。
根據 Angular 文檔(https://docs.angularjs.org/api/ng/service/ $http),您需要設置withCredentials = true
在跨域請求上發送 cookie(參考:Mozilla CORS 文檔)。發出請求以獲取 cookie(例如通過 HTTPS POST 登錄憑據),然后連續的 AJAX 請求將將該 cookie 呈現給服務器。
另一種方法是發布 OAuth2 不記名令牌(“令牌身份驗證”),在后端(Redis、Bolt、mySQL 等)中記錄令牌 <=> 用戶 ID,并讓 Angular 應用程序將其保存在本地存儲中并將其發送到每個請求的頭部。
- 2 回答
- 0 關注
- 207 瀏覽
添加回答
舉報
0/150
提交
取消