我们的网站允许用户创建可嵌入其他第三方网站的小部件。当最终用户在某个站点上与我们的小部件交互时,我们希望代表他/她发布Twitter更新,然后在小部件本身上向用户显示消息(前提是Twitter更新成功)。我们一直在使用带有基本身份验证的twitter api来执行此操作(我们在窗口小部件中询问用户的用户名和密码)。现在Twitter已经专门转移到OAuth,我们已经创建了一个Twitter应用程序来使用OAuth API。
现在,解决这个问题的一种方法是将我们的Twitter应用注册为客户端应用(而不是浏览器应用)。为此,可能的流程是我们要求用户转到URL(链接点击并在新窗口中打开),然后在twitter上进行身份验证,授予我们的应用程序权限并返回到窗口小部件并输入twitter提供的PIN 。这很麻烦。
另一种方法是将应用注册为网络应用。一旦用户进行身份验证并提供权限(在新窗口中作为链接点击打开),我们要求Twitter使用访问令牌和其他信息(需要为用户发送推文)重定向到我们自己的自定义URL。所以,推文应该可以正常工作。但是,如何通知窗口小部件(在原始窗口中的iframe内运行)是否成功发送了推文?
我可以想到基于轮询的解决方案,但必须有更好的方法,对吧?
另外,我不能使用window.open(而不是href =和target = _blank的链接),因为浏览器将它们视为弹出窗口并阻止它们。
答案 0 :(得分:1)
有两种选择(我个人使用其中一种)。
您可以在Session中(在回调脚本/页面中)存储它刚刚使用令牌进行身份验证的事实,并且在您的iframe页面中有一个javascript计时器检查另一个脚本(通过AJAX)是否为Session已设置或未设置 - 如果已设置,则iframe将知道它已成功。
第二个选项是做同样的事情,除了检查数据库是否已存储(不使用会话)。
我建议做第一个选项。