pap*_*lip 43 ssl https facebook facebook-javascript-sdk
我有一个使用Facebook Connect.js的Facebook应用程序.
我正在通过HTTPS运行我的应用程序.https://除了必须包含在Facebook中的一些内容之外,网站上的所有内容都是从中提供的Connect.js
问题是我收到警告消息,说明页面中有非安全项目.
我已经使用Chrome的开发者工具/网络选项卡检查了正在加载的脚本,以查看正在加载的文件以及从何处加载.
我能看到的唯一一个是通过HTTP加载而不是通过HTTPS加载的是一个名为的文件http://static.ak.facebook.com/connect/canvas_proxy.php.
如何强制此文件使用HTTPS?
小智 54
TL; DR
设置FB._https到true调用之前FB.init.像这样:
FB._https = true;
FB.init({
/* your app id and stuff */
});
Run Code Online (Sandbox Code Playgroud)
说明
如果你解开Facebook JavaScript SDK,你会发现它基本上是一个带有一堆属性的对象文字.其中一个属性是_https布尔值.此属性确定FB._domain在发出API请求时要使用(存储在)的URL集.似乎Facebook为每种类型的API请求保留了两组URL - 安全URL和非安全URL - 然后使用调用的开关函数getDomain()来确定在发出请求时使用哪个.
JavaScript SDK导致安全警告的原因是由于FB._https属性的定义方式.这是它目前定义为2011-8-24的方式:
_https: (window.name.indexOf('_fb_https') > -1)
显然Facebook认为,如果该window.name物业有_fb_https,那么它必须是一个安全的应用程序.这显然是不正确的.真正的测试应该是这样的:
_https: window.location.protocol == "https:"
不幸的是,SDK不是开源的,甚至没有很好的文档,因此我无法提交此更改的拉取请求:P.在短期内,设置FB._https到true调用之前手动FB.init应该做的伎俩.
所以这会给你相同的协议链接:
FB._https = (window.location.protocol == "https:");
Run Code Online (Sandbox Code Playgroud)
我几天前遇到过这个问题.我的整个应用程序都使用HTTPS,我的问题只是通过HTTP加载的个人资料图片...我的快速和肮脏的修复是手动替换所有个人资料图片的域名.例如,
str_replace('http://profile.ak.fbcdn.net','https://fbcdn-profile-a.akamaihd.net',$user['pic_square']);
Run Code Online (Sandbox Code Playgroud)
您必须检查并查看您的个人资料图片有哪些网址.我假设他们不是来自完全相同的地方.查看您自己的个人资料图片的网址,并替换我所拥有的内容https://fbcdn-profile-a.akamaihd.net.
在更加努力地查看Facebook文档之后:
如果需要通过安全连接返回图片,可以将return_ssl_resources参数设置为1:https://graph.facebook.com/4/picture?return_ssl_resources = 1 .
我发现了一个名为的附加参数return_ssl_resources,当传递给true它时,它会使用HTTPS返回个人资料图片.
$fql = "SELECT uid, name, pic_square FROM user WHERE uid=me()";
$param = array( 'method' => 'fql.query', 'query' => $fql, 'return_ssl_resources'=>1);
$fbuser = $facebook->api($param);
Run Code Online (Sandbox Code Playgroud)
它就像一个魅力,我停止了混合安全警告.我希望这有帮助!
| 归档时间: |
|
| 查看次数: |
23596 次 |
| 最近记录: |