在谷歌浏览器中(我在9.0.597.98)我使用Graph API/Javascript SDK的Facebook iFrame应用程序倾向于总是基于跨域脚本编写引发以下两个JavaScript错误(见下文),但仅在应用程序的一个页面上.
它进入第二条消息的无限重试循环.离开之后,它在今天早上报告了50万次重试!
正在使用的FB调用用于登录:
FB.login(function(response) {
if (response.session) {
// user successfully logged in
} else {
// user cancelled login
}
});
Run Code Online (Sandbox Code Playgroud)
在Firefox和IE9中,我没有收到这些错误.它特定于Chrome(可能是WebKit).
奇怪的是,我在应用中使用了第二页FB.Login,除了其他浏览器之外,它还可以在Chrome中使用.我在某处读到Safari对跨域脚本编写有更严格的要求 - 它与Chrome共享相同的代码库.
Domains, protocols and ports must match(错误消息)我相信实际上是满意的,因为我有另一个与FB.Login调用一起工作的页面我在这两个消息之间看到的唯一区别是postmessage查询参数对于每个消息都有不同的值(在消息中加粗).然而,只有一个iFrame构成了一个Facebook应用程序,所以我想知道为什么两个不同的值可能会一个接一个地使用.我不是故意引导回答专注于这个项目,但我确实想指出它.
欢迎提出我可能尝试解决此错误的建议.
消息1:不安全的JavaScript尝试使用URL访问框架
https://www.facebook.com/dialog/permissions.request?api_key=168297653202478&app_id=168297653202478&display=popup&fbconnect=0&locale=en_US&method=permissions.request&next=http%3A%2F%2Fstatic.ak.fbcdn.net%2Fconnect%2Fxd_proxy. php%23cb%3Df3d15633dc%26origin%3Dhttp%253A%252F%252Fsubdomain.example.com%252Ff22a8befa%26relation%3Dopener%26transport%3D postmessage%26frame%3D f111baf6f4%26result%3D%2522xxRESULTTOKENxx%2522&perms = publish_stream%2Coffline_access&return_session = 1&sdk =乔伊&session_version = 3从与URL帧http://subdomain.example.com/colonversationmap/Admin.TestPage.aspx?signed_request=871miFgH_-o05POnx20387XHd2YlArKLU6qUv8VkxY4.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImlzc3VlZF9hdCI6MTI5ODQyMDEwMSwidXNlciI6eyJjb3VudHJ5IjoiY2EiLCJsb2NhbGUiOiJlbl9VUyIsImFnZSI6eyJtaW4iOjIxfX19.域,协议和端口必须匹配.
消息2:不安全的JavaScript尝试使用URL访问框架
https://www.facebook.com/dialog/permissions.request?api_key=168297653202478&app_id=168297653202478&display=popup&fbconnect=0&locale=en_US&method=permissions.request&next=http%3A%2F%2Fstatic.ak.fbcdn.net%2Fconnect%2Fxd_proxy. php%23cb%3Df304d46e08%26origin%3Dhttp%253A%252F%252Fsubdomain.example.com%252Ff23ce8203%26relation%3Dopener%26transport%3D postmessage%26frame%3D fcd3637bc%26result%3D%2522xxRESULTTOKENxx%2522&perms = publish_stream%2Coffline_access&return_session = …
javascript google-chrome facebook-iframe facebook-javascript-sdk
我正在迁移到Oauth 2.0.我当前的站点使用JS SDK,有一个fb登录按钮,然后我访问Graph以获取用户详细信息.
我在获取访问令牌以从Graph获取此数据时遇到问题.
一个问题可能是JS SDK对话框没有将我的重定向到它应该指向的URL,即带有?code = XXXXXXX的URL,然后我可以使用它来获取访问令牌.
所以我看了php SDK(我正在使用ASP)来看看它是如何做到的.我已经在cookie中解析了signed-request值,得到了'code'参数中的值以添加到令牌URL但我无法获得访问令牌.这些是我正在使用的值:
解析的signed_request数据:
{"algorithm":"HMAC-SHA256","code":"2.AQCovUOFCduELbna.3600.1323900000.1-773555243|Y_cW4riF4K7el_9a4oVNjL0qvZc","issued_at":1323895617,"user_id":"XXXXXXXXXX"}
Token URL: https://graph.facebook.com/oauth/access_token?
client_id=XXXXXXXX&
redirect_uri=XXXXXXXX&
client_secret=XXXXXX&
code=2.AQCovUOFCduELbna.3600.1323900000.1-773555243|Y_cW4riF4K7el_9a4oVNjL0qvZc
Run Code Online (Sandbox Code Playgroud)
这是回应:
{"error":{"message":"Error validating verification code.","type":"OAuthException"}}
Run Code Online (Sandbox Code Playgroud)
代码值是否显示格式正确?关于什么是错的任何想法?
facebook-graph-api access-token facebook-javascript-sdk facebook-oauth
听起来像一个愚蠢的问题,但......
我正在将Facebook Javascript SDK添加到一个看似HTML5的网站,它有一个
<!doctype html>和一个<meta http-equiv="Content-Type" content="text/html; charset=utf-8">所以我假设这是原作者的意图.
但是,查看该网站的Google Analytics,可能会有不少人使用IE8访问该网站.
我们不想使用iFrame,因为XFBML和HTML5版本更加通用.
所以这就是为什么我要问我是否应该为页面使用HTML5或XFBML?
我正在学习Angularjs为新项目创建单页面应用程序.后端将在REST风格的API中使用Play 2.0框架的Scala.我想使用FB,Twitter,Google,OpenId帐户有一种方式供用户注册和登录,但我不太了解OAuth以及如何使其与Angular和Play 2.0一起使用(当然我已开始阅读OAuth).
你对如何实现这个有什么想法吗?有没有任何libraties /工具来处理它?还是教程和例子?
编辑:正如Pere Villega所指出的,SecureSocial似乎是Play方面的一个很好的选择,但它遵循MVC模式(在服务器上生成的视图)而不是angularjs + play,这是更多的MVP(或MVVM)+ REST api on服务器.对于Angular,我找到了树苗.我必须弄清楚如何整合2.
scala oauth facebook-javascript-sdk playframework-2.0 angularjs
我在我的主页上使用"facebook like box"模块:
<div id="fb-root"></div>
<script>
(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/it_IT/all.js#xfbml=1";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
</script>
Run Code Online (Sandbox Code Playgroud)
我把这个代码放在body标签后面,我把它放在左侧:
<div class="fb-like-box fb-box-laterale" href="http://www.facebook.com/RistorantiRomaRisto.it" data-href="http://www.facebook.com/platform" data-width="190" data-height="380" data-show-faces="true" data-stream="false" data-header="true"></div>
Run Code Online (Sandbox Code Playgroud)
所有工作都已完成,但我在控制台中收到此错误: FB.getLoginStatus() called before calling FB.init()
我刚刚阅读了其他对话,其中我读到"你需要异步加载api",我按照他们的指示没有结果.
我该如何解决?
我在我的网站上使用FB JDK启用了FB登录.当我使用它时,它完美地工作:对话框窗口打开,我授权,并且authResponse正如预期的那样.当另一个用户使用它(尚未授权应用程序但登录到FB)时,登录对话框会短暂显示,并立即消失,并且响应对象具有状态not_authorized.关于为什么对话框可能不会要求用户授权的任何想法?
在我的布局中(Haml):
%body
#fb-root
:javascript
window.fbAsyncInit = function() {
FB._https = false;
FB.init({
appId : <App ID>
status : true,
cookie : true,
oauth : true,
xfbml : true
});
FB.getLoginStatus(function(response) {
if(window.reportFBstatus) {
reportFBstatus(response);
}
}, true);
};
// Load the SDK
(function(d){
var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
if (d.getElementById(id)) {return;}
js = d.createElement('script'); js.id = id; js.async = true;
js.src = "//connect.facebook.net/en_US/all.js";
ref.parentNode.insertBefore(js, ref);
}(document));
Run Code Online (Sandbox Code Playgroud)
登录链接:
%a{href: '#', onclick: 'FB.login(window.reportFBstatus, …Run Code Online (Sandbox Code Playgroud) 我已经解决了这个问题,但我的问题不同了.我不确定javascript登录如何确定,以及其他人如何不登录其他帐户.
根据入门 FB.authResponse是在登录成功时调用,但当然在客户端.
然后我们可以得到userId和accessToken退出响应,我们也可以打电话/me获取更多信息.为了将该用户置于会话中,所有关于成功javascript登录的信息必须被发送到服务器,这是我感到困惑的地方.毕竟它是HTTP,每个其他请求都是不同的,可以复制.
可能只是因为我很困惑,关于某人如何不能破解并模仿任何其他用户的脸书ID来登录他的帐户.
例如,在身份验证成功之后,我对我的服务器进行ajax调用,提供fb-user-id然后我将其与数据库匹配并将相应的用户放入会话中,但不是因为这是fb-user-id在后端没有再次验证(或者它是否经过验证?,我没有找到任何关于它的信息)这个特定用户是实际注册我的应用程序的用户,然后是与其他人的fb相同的登录请求-user-id可以登录到他的帐户.
我敢肯定,我不是第一个有这种困惑的人.请帮助清除这种混乱,因为我现在已多次阅读文档,但仍无法弄清楚为什么其他人无法登录其他人的帐户.
编辑
我发现了这个,similar question但这里的人没有回答他如何验证后端登录或可能是我无法理解.
我正在尝试使用facebook UI请求对话框来选择朋友.这在safari和Chrome中运行得非常好,但是在firefox和IE11(尚未测试的低版本)中,它会随着加载动画一直挂起.
function pickFriend(ev)
{
FB.ui(
{
method: "apprequests",
message: "Choose a friend.",
max_recipients: 1,
title:"Invite a friend"
},sendMessage);
ev.preventDefault();
}
$("#element").click(pickFriend);
Run Code Online (Sandbox Code Playgroud)
然后我尝试直接在控制台中调用该函数,以确保它不是我的实现,这是问题,并且我得到了与加载动画挂起的相同结果.然后我尝试了不同的显示选项,我可以在弹出模式下工作,但对我来说这不是很优雅,我更喜欢它在iframe模式下工作,就像在safari和chrome中一样.
还有其他人遇到过这个问题吗?如果是这样的话有这个原因并且可以解决吗?
我认为这可能完全取决于Facebook的修复,如果我想保持浏览器兼容性,那么除了在弹出模式下运行之外别无选择.
Facebook推出了Facebook页面的商店部分.我需要通过javascript sdk管理我的页面的商店部分,但我无法找到propoer文档或参考这样做.我知道如何通过使用FB.api的post方法通过sdk来管理或更新页面的简单字段:
FB.api(/page_id_and_post_method, function(response) {
console.log("PAGEEEEEE DETAILS", response);
});
Run Code Online (Sandbox Code Playgroud)
所以,问题是我找不到该"商店"部分的正确字段名称以便更新它.
那么如何通过sdk/api阅读/更新我的页面的"商店"部分,就像shopify所做的那样,如下所示:
https://www.facebook.com/Womansera/shop?ref=page_internal&rid=221671794535129&rt=9
facebook facebook-graph-api facebook-javascript-sdk facebook-php-sdk
我有一个使用Angular 4构建的Progressive Web App.
我的问题是当从主屏幕应用程序使用时,Fb登录对话框不会自动关闭.在Chrome浏览器中打开它时工作得很好但是当我从已安装的主屏幕应用程序使用它时,对话框窗口会打开请求权限,在给出所有权限后,对话框变为空白并且不会关闭或重定向回应用程序.
看起来如果我将manifest.json中的"display"更改为"browser",它可以工作但是当"display"处于"standalone"状态时不起作用.
我搜索了一遍但没有成功.
谢谢
facebook google-chrome facebook-javascript-sdk progressive-web-apps angular
facebook ×7
javascript ×2
access-token ×1
angular ×1
angularjs ×1
html5 ×1
login ×1
oauth ×1
scala ×1