我正在尝试使用 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 关注
- 176 浏览
添加回答
举报
0/150
提交
取消