如何将登录服务从Ruby迁移到ReactJS并兼容Ruby端原有_my_session cookie
核心问题解答
1. 是否可以直接通过ReactJS生成_my_session cookie?
不可以。
Rails默认的cookie_store会话机制会使用服务端存储的secret_key_base密钥对会话内容进行加密签名,只有通过该密钥生成的cookie才能被Rails识别为合法会话。
secret_key_base属于站点核心敏感信息,绝对不能暴露到前端,否则任何人都可以伪造任意用户的会话,直接击穿全站权限体系- 前端无密钥的前提下,不可能生成符合Rails校验规则的会话cookie
2. 有没有方法可以解码_my_session cookie?
持有服务端secret_key_base的前提下可以完成解码,但不建议在前端做解码操作,风险同上。
如果前端需要读取会话内容,最优方案是由Rails后端提供轻量接口,读取当前会话的公开信息返回给前端即可,无需暴露密钥给前端。
推荐适配方案(优先级从高到低)
- 方案1:React登录页面的身份验证请求直接提交到原有Ruby后端的登录接口,后端验证通过后会自动返回合法的
_my_sessioncookie,浏览器会自动存储,新旧页面的授权逻辑无需做任何修改即可兼容 - 方案2:如果React登录页对接了新的身份校验服务,可以在校验通过后调用Ruby后端提供的内部可信接口,将用户合法身份信息传给后端,由后端生成标准的
_my_sessioncookie返回 - 方案3:如果需要完全替换登录逻辑,可修改Rails端的会话校验逻辑,兼容前端生成的新身份凭证,但改造成本最高,不推荐优先选择
内容的提问来源于stack exchange,提问作者Atulya
相关产品推荐
相关产品推荐

