Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Facebook登录和Iframe重定向_Facebook_Javascript - Fatal编程技术网

Facebook登录和Iframe重定向

Facebook登录和Iframe重定向,facebook,javascript,Facebook,Javascript,我正在构建一个Facebook IFrame应用程序。我正在使用下面的javascript代码请求用户登录并允许对应用程序的权限,之后应该将其重定向到iframe应用程序。代码工作正常。但是,我有两个问题 a。一旦应用程序加载到IFrame中,它就会重定向到一个页面(.)并显示一个大的facebook图标。当我点击这个图标时,它会重定向到facebook登录页面。我希望我的应用程序直接重定向到登录页面,而不是显示中间的facebook图标页面 b。当用户在facebook中单击请求权限的“允许”

我正在构建一个Facebook IFrame应用程序。我正在使用下面的javascript代码请求用户登录并允许对应用程序的权限,之后应该将其重定向到iframe应用程序。代码工作正常。但是,我有两个问题

a。一旦应用程序加载到IFrame中,它就会重定向到一个页面(.)并显示一个大的facebook图标。当我点击这个图标时,它会重定向到facebook登录页面。我希望我的应用程序直接重定向到登录页面,而不是显示中间的facebook图标页面

b。当用户在facebook中单击请求权限的“允许”按钮时,页面将重定向到我的主站点(),而不是iframe应用程序()

我已经在下面粘贴了我的javascript,这与上面的怪癖一起工作

var api_key = 'xxxxxxxxxxxxxxx';
var channel_path = 'xd_receiver.htm';

FB_RequireFeatures(["Api"], function () {
    FB.Facebook.init(api_key, channel_path);
    var api = FB.Facebook.apiClient;
    // require user to login
    api.requireLogin(function (exception) {
        FB.Connect.showPermissionDialog("publish_stream");
    });
});

非常感谢您的帮助。

我不确定重定向之间的中间页面,但您的应用画布和连接url指向什么? 登录后的重定向应该转到该页面,除非您在代码中的某个地方重写了该页面。
如果fb上的设置不是设置为apps.facebook.com/myapp,请将fb上的设置中的url更改为apps.facebook.com/myapp。

我不确定重定向之间的中间页面,但你的应用画布和连接url指向什么? 登录后的重定向应该转到该页面,除非您在代码中的某个地方重写了该页面。
如果fb上的设置不是设置的URL,请将fb中的URL更改为apps.facebook.com/myapp。

您可以使用新的facebook Graph API()来处理身份验证。首先,您必须检查您是否拥有
访问\u令牌

$access_token = $_REQUEST['access_token'];

if($access_token != NULL) { 
  ...
}
else {
  // the following javascript
}
javascript是:

<script type="text/javascript">
    top.location.href = '<?= "https://graph.facebook.com/oauth/authorize?client_id=".$appid."&redirect_uri=".$appurl."oauth_redirect" ?>'
</script>
最后,您可以返回索引页面(变量
$appurl
并测试用户是否有权限测试
访问\u令牌
状态


希望有帮助

您可以使用新的Facebook Graph API()来处理身份验证。首先,您必须检查您是否拥有
访问\u令牌

$access_token = $_REQUEST['access_token'];

if($access_token != NULL) { 
  ...
}
else {
  // the following javascript
}
javascript是:

<script type="text/javascript">
    top.location.href = '<?= "https://graph.facebook.com/oauth/authorize?client_id=".$appid."&redirect_uri=".$appurl."oauth_redirect" ?>'
</script>
最后,您可以返回索引页面(变量
$appurl
并测试用户是否有权限测试
访问\u令牌
状态


希望有帮助

我想起来了

您必须在iframe应用程序中的所有链接和重定向中使用
target=“\u top”


希望我能帮助你。

我想起来了

您必须在iframe应用程序中的所有链接和重定向中使用
target=“\u top”

希望我能帮助你。

谢谢你的回答。 我使用了McKAMEY()发布的解决方案,几乎没有改动,它可以按预期工作,没有显示中间的facebook图标页面,并且在验证后正确重定向到iframe应用程序

我已经在下面发布了工作解决方案,以防有人需要

var api_key = 'xxxxxxxxxxxx';
var channel_path = './xd_receiver.htm';
var canvas_url = "http://apps.facebook.com/myappxxxx/"// ensure your canvasurl has a '/' at the end!

function Initialize() {
    FB_RequireFeatures(["Api"], function () {
        FB.Facebook.init(api_key, channel_path);
        FB.ensureInit(function () {
            FB.Connect.ifUserConnected(
        function () {
            var uid = FB.Connect.get_loggedInUser();
            if (!uid) {
                authRedirect();
                return;
            }
        },
        authRedirect);
        });

    });
}
function authRedirect() {
    //This is the Sample URL Structure for redirecting to facebook 
    //http://www.facebook.com/connect/uiserver.php?
    //app_id=XXXXXXXXXXXXX&
    //next=xxxxxxxxxx_success_url_here_XXXXXXX&
    //display=page&
    //perms=XXXXXX_comma_seperated_permissions_list_hereXXXXXX&
    //fbconnect=1&
    //method=permissions.request

    window.top.location.href = "http://www.facebook.com/connect/uiserver.php?app_id=" +  encodeURIComponent(api_key) + "&next=" + encodeURIComponent(canvas_url) + "&display=page&perms=publish_stream&fbconnect=1&method=permissions.request";
}

Initialize();
谢谢你的回答。 我使用了McKAMEY()发布的解决方案,几乎没有改动,它可以按预期工作,没有显示中间的facebook图标页面,并且在验证后正确重定向到iframe应用程序

我已经在下面发布了工作解决方案,以防有人需要

var api_key = 'xxxxxxxxxxxx';
var channel_path = './xd_receiver.htm';
var canvas_url = "http://apps.facebook.com/myappxxxx/"// ensure your canvasurl has a '/' at the end!

function Initialize() {
    FB_RequireFeatures(["Api"], function () {
        FB.Facebook.init(api_key, channel_path);
        FB.ensureInit(function () {
            FB.Connect.ifUserConnected(
        function () {
            var uid = FB.Connect.get_loggedInUser();
            if (!uid) {
                authRedirect();
                return;
            }
        },
        authRedirect);
        });

    });
}
function authRedirect() {
    //This is the Sample URL Structure for redirecting to facebook 
    //http://www.facebook.com/connect/uiserver.php?
    //app_id=XXXXXXXXXXXXX&
    //next=xxxxxxxxxx_success_url_here_XXXXXXX&
    //display=page&
    //perms=XXXXXX_comma_seperated_permissions_list_hereXXXXXX&
    //fbconnect=1&
    //method=permissions.request

    window.top.location.href = "http://www.facebook.com/connect/uiserver.php?app_id=" +  encodeURIComponent(api_key) + "&next=" + encodeURIComponent(canvas_url) + "&display=page&perms=publish_stream&fbconnect=1&method=permissions.request";
}

Initialize();


关于在一个框架内重定向到Facebook登录页面的注意事项。您必须使用javascript重定向整个页面,因为登录页面通过了X-Frame-Options:DENY标题,现代浏览器将阻止您将用户发送到URL(如果该标题存在)。解决方案是使用javascript::window.top.location='';要重定向整个页面

请注意在一个框架内重定向到Facebook登录页面。您必须使用javascript重定向整个页面,因为登录页面通过了X-Frame-Options:DENY标题,现代浏览器将阻止您将用户发送到URL(如果该标题存在)。解决方案是使用javascript::window.top.location='';为了重定向整个页面

很抱歉,我应该提到这一点,我使用的是Javascript SDK,而不是php.robinsonc494,我最初将连接url指向apps.facebook.com/myapp,但不得不将其更改为主站点url(),因为FB.connect.streamPublish()如果连接url指向apps.facebook.com/myapp,则不起作用。如果我尝试了您的代码,则表明FB_RequireFeatures未定义。这是不是使用了一个不同的facebook js sdk?这个问题和你的问题一样吗?很抱歉,我应该提到这一点,我使用的是Javascript SDK,而不是php.robinsonc494,我最初将连接url指向apps.facebook.com/myapp,但必须将其更改为主站点url(),因为如果连接url指向apps.facebook.com/myapp,FB.connect.streamPublish()将无法工作。如果我尝试您的代码,它说FB_的要求功能尚未定义。这是不是使用了一个不同的facebook js sdk?这个问题和你的问题一样吗?谢谢你。我使用的是javascript sdk而不是php,你有javascript的示例吗?Sry jack,我没有一个很好的例子:(.看看“”,也许你会发现一些;)。ultrayoshi,谢谢。我在应用程序中使用javascript sdk,而不是php,你有javascript中的示例吗?Sry jack,我没有一个很好的例子:(.看一看“”,也许你会发现一些东西;)。我得到一个*********窗口未定义错误,尝试重定向时此解决方案不起作用:不安全的JavaScript尝试使用URL访问帧我得到了一个未定义的*******窗口错误,尝试重定向时此解决方案不起作用:不安全的JavaScript尝试使用URL访问帧