问题描述
我有一个应用程序要求用户使用 Reddit 登录。当他们接受时,它会打开一个新窗口(称为 SpawnedWindow),Reddit 询问他们是否要连接,当他们这样做时,SpawnedWindow 会重定向到我服务器上的 GET 端点,并提供成功/失败信息。我的服务器将进行一些计算以确定身份验证是否真的成功,如果成功,它将向 SpawnedWindow 发送一个“ok”(作为对 GET 请求的响应)。
我希望原始页面能够检测到这个“正常”并继续进行用户注册。我如何在新窗口和原始窗口之间进行通信?
如果您熟悉“使用 Google 登录”按钮:正如我们所知,有一个弹出窗口,根据身份验证的结果,主页将具有动态行为(基于登录成功与否)。这基本上就是我想要实现的目标。
解决方法
API(以及许多具有类似授权过程的 API)提供了一个 redirect_uri
,用户将在授权成功后重定向到该 redirect_url
。您可以传递一个 Select E,CASE WHEN QUALIFER = '1' THEN 'NAME1' WHEN QUALIFER = '2' then 'NAME2' ELSE 'FINALNAME' END AS TYPE,count(rt.ID) 'Number '
from TABLE_ONE co (nolock)
join TABLE_TWO rt (nolock)
on co.ID = rt.ID
where co.E in (select * from #tempEmail)
AND convert(date,co.INSERTED_TIMESTAMP)between '1/1/2020' and '8/15/2020'
AND TRANS_STATUS = 'APPROVED'
group by E,QUALIFER
order by E,QUALIFER
查询参数,该参数会转到您网站上的某个页面。这样,一旦授权成功,新打开的页面(在您的网站上,Google 已将弹出窗口重定向到该页面)可以与原始页面(在您的网站上)通信。
一种方法是使用 BroadcastChannel - 在原始页面上打开一个频道,然后等待消息。在新页面打开同一个频道发送消息,旧页面可以收听消息。
另一种选择是使用本地存储。在原始页面上,侦听 storage change 事件。在新页面上,更改存储以触发事件。