【发布时间】:2020-03-03 01:26:57
【问题描述】:
我对如何使用弹出窗口 (window.open) 在 React 中实现 OAuth 感兴趣。
例如我有:
-
mysite.com— 这是我打开弹出窗口的地方。 -
passport.mysite.com/oauth/authorize— 弹出窗口。
主要问题是如何在window.open(弹出窗口)和window.opener 之间建立连接(众所周知,window.opener 由于跨域安全性为空,因此我们不能再使用它了)。
⇑
window.opener每当您导航到不同的主机时都会被删除(出于安全原因),没有办法绕过它。如果可能的话,唯一的选择应该是在一个框架内付款。顶部文档需要保留在同一主机上。
方案:
可能的解决方案:
- 使用
setInterval描述的here 检查打开的窗口。 使用cross-storage(恕我直言不值得)。
那么 2019 年最好的推荐方法是什么?
React 包装器 - https://github.com/Ramshackle-Jamathon/react-oauth-popup
【问题讨论】:
-
2019 年,localStorage 支持要好得多。我会使用 localStorage 方法(在stackoverflow.com/questions/18625733/… 中描述),因为它似乎不是一个解决方法。父窗口不需要定期检查子窗口状态。
setInterval可以作为 localStorage 的后备 -
@KhanhTO,是的,我完全同意你关于
localStorage的看法,但它只适用于同一个域,因此不适用于我的情况 -
完成 OAuth 后,子窗口将重定向回您的域,您现在与父窗口在同一个域中
-
@KhanhTO,嗯,这是个好主意!我应该知道..
-
如果浏览器在重定向回我们的域后恢复
window.opener会更好,但事实并非如此
标签: javascript reactjs oauth popup authorization