有其他人也遇到过这个问题吗?
我正在使用Facebook PHP SDK和一些JavaScript构建Facebook画布应用程序。
现在,当我让用户通过OAuth身份验证流程时,我注意到浏览器中的URL会自动添加"#_=_"
,因此我的URL看起来像这样:
http://apps.facebook.com/xxxxxxxxxxxx/#_=_
当我重定向到应用程序配置文件页面时,URL 是这样的:
http://www.facebook.com/apps/application.php?id=xxxxxxxxxxxx#_=_
我正在使用重定向
echo "<script type='text/javascript'>top.location.href='$appcanvasurl';</script>"
将URL添加到画布,并
echo "<script type='text/javascript'>top.location.href='$appprofurl';</script>"
用于应用程序个人资料页面。
那么为什么会附加这个#_=_
呢?
更新:
根据跟踪器上的此错误,这是设计问题,并且提供redirect_uri
的值并不会改变这一点。
根据该页面上的官方Facebook回复(必须登录 Facebook 才能查看帖子):
这被标记为“按设计”,因为它可以防止潜在的安全漏洞。
一些浏览器将从 URL 的哈希片段附加到它们被重定向到的新 URL 的末尾(如果该新 URL 本身没有哈希片段)。
例如,如果 example1.com 返回到 example2.com 的重定向,则浏览器转到 example1.com#abc 将转到 example2.com#abc,并且 example1.com 的哈希片段内容将可被 example2.com 上的脚本访问。
由于可能将一个验证流重定向到另一个验证流,因此可能会将一个应用程序的敏感验证数据访问另一个应用程序。
通过附加新的哈希片段来防止这种浏览器行为来减轻这种情况。
如果担心结果 URL 的美观度或客户端行为,可以使用 window.location.hash(甚至是自己的服务器端重定向)来删除有问题的字符。
redirect_uri
,仍然会附加#_=_
。不过有一个解决方法,可以在这里使用javascript:https://dev59.com/questions/7mw05IYBdhLWcg3wnjHC,并且在这里:http://facebook.stackoverflow.com/questions/7338853/php-location-header-ignore-hash/7340855#7340855 - bool.dev