用户登录/登出功能,当登录页面在另一域名下
需求:
要求为某网址增加用户登录功能。登录页面是现成的,但是位于另一个域名。当request 没带token ,要求跳转此登录页面,用户登录后会返回token. 此时再跳回原网址。这个过程如何避免发生跨域问题?
最简单的方案
登录:
- 若用户在未登录状态,则应访问
$(登录页)?returnUrl=$(frontPage)
跳转登录页面。在用户手动成功登录后,页面会自动跳回returnUrl, 并在URL中携带参数token。前端应马上读取token,并在地址栏删除token。
1.1. 这里可能有种特殊情况,就是用户在原网址是未登录状态,但是在用户中心是登录状态。这也是没做单点登录系统(sso) 造成的。这时跳回returnUrl,并带上token。 - 用户在登录状态,调用指定api时, request应携带Authorization字段, 该字段即在第1步中获取的token。
用户登出时,前端应删除cookie等信息,并调用logout api
改进一
用户手动登录成功,页面跳回returnUrl时,不是通过URL传递token,而是使用POST请求发送一个隐藏表单将token发送回returnUrl
改进二
使用postMessage传回token
Oauth或者SSO
应该是更完备严谨的方法