Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.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注册插件在使用长/多个自定义字段登录FB后返回“无效客户端id”_Facebook_Json_Plugins_Facebook Javascript Sdk_Registration - Fatal编程技术网

Facebook注册插件在使用长/多个自定义字段登录FB后返回“无效客户端id”

Facebook注册插件在使用长/多个自定义字段登录FB后返回“无效客户端id”,facebook,json,plugins,facebook-javascript-sdk,registration,Facebook,Json,Plugins,Facebook Javascript Sdk,Registration,我使用的FB注册插件代码如下: <html xmlns:fb="http://ogp.me/ns/fb#"> <script type="text/javascript"> window.fbAsyncInit = function() { FB.init({appId: 'xxx', status: true, cookie: true, xfbml: true}); }; (function() { var e = docum

我使用的FB注册插件代码如下:

<html xmlns:fb="http://ogp.me/ns/fb#">

    <script type="text/javascript">
    window.fbAsyncInit = function() { FB.init({appId: 'xxx', status: true, cookie: true, xfbml: true}); };
    (function() {
        var e = document.createElement('script');
        e.async = true;
        e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
        document.getElementById('fb-root').appendChild(e);
    })();
</script>
如果用户在访问此注册表表单时已登录FB,则会填充FB字段并使表单生效。但是,如果用户未登录FB,并在表单登录中选择FB提示符,以使用您的配置文件信息预先填充下面的表单,然后向FB提供登录凭据,则表单将消失,并由FB发出的相当一般的“client_id”错误代替

如果用户随后刷新页面,则表示他/她已登录FB,并填充正确的FB字段

我已经验证了JSON字段列表。在测试期间,我发现如果我将字段列表减少到:

                                fields='[
                            {"name":"name","view":"prefilled"},
                            {"name":"email"},
                            {"name":"password"},
                            {"name":"s_question","description":"Secret Question","type":"select","options":{"2":"In which city were you born?","4":"What is your favorite book?","3":"What is your favorite pets name?","6":"What is your favorite vacation spot?","1":"What is your mothers maiden name?"}},
                            {"name":"s_answer","type":"text","description":"Secret Answer"},
                            {"name":"first_name"},
                            {"name":"last_name"},                                                               ]' onvalidate="validate">
然后我没有得到错误。如果我将最长的字段state字段从上方添加回中,则返回client_id错误。我可以添加其他较短字段的组合,而不是添加状态,并得到相同的错误。这让我觉得我达到了JSON字段列表的某种最大大小限制。可能不是针对发送到FB的实际JSON,而是在FB登录后发送回的相应隐藏字段中

如果我无法解决这个问题,我计划只获取基本的FB字段,并将其余字段移到另一个页面。当然,我更喜欢把它完整地留下,因为我的表格和我的支持记录。在刷新时将FB数据加载到表单中后,对所有工作进行编码


感谢您对这一冗长描述的耐心

我对此没有任何修正,我只能提供一个可能的答案,不,我认为最有可能的解释是:

与所有其他插件一样,标签的作用基本上是在页面中创建一个iframe,它获取作为GET参数在查询字符串中传递的所有必要参数

因此,您为注册表单定义的许多字段意味着iframe的URL中有一个很长的查询字符串

问题是,浏览器限制了URL的可能长度–请参阅

web服务器也会这样做,在他们说“呃,这对我来说有点太多了,需要通过GET处理,所以很抱歉,但不抱歉…”

因此,虽然您的注册表单可能会在用户登录时定义许多字段,但因为iframe URL的长度不受浏览器或Facebook服务器的限制–如果用户未登录并单击登录按钮,则会通过Facebook身份验证流重定向,在成功登录后,他们应该“发送回”的URL注册表单的地址及其所有GET参数(在本例中)在Auth对话框URL中作为GET参数以及其他参数传输。当在另一个URL中作为GET参数传输URL时,必须应用URL编码,这会使它更加糟糕

这就产生了一个很长的URL,在浏览器或Facebook服务器的限制下,该URL无法再传输/处理。由于您收到Facebook的错误消息,在这种情况下,Facebook的服务器很可能拒绝处理该消息

因此,你可以尝试打开Facebook的bug报告——他们设置最大GET URL长度的限制可以解决这个问题;但如果他们愿意这样做,可能是另一个问题。因为允许更长的请求URL可能还有其他含义


即使他们这样做了,您的用户使用的浏览器可能仍然会遇到障碍–如果Internet Explorer中当前的URL路径部分限制仍然是2048个字符,那么这可能是下一个在前端出现多个字段的注册表的部分…

谢谢,CBroe,详细的解释。我将重新编码,只获取Facebook表单上的基本字段,并在本地获取其余字段,而不是向Facebook寻求可能无法进行的更改。我感谢你的意见。
        function validate(form)
    {
        errors = {};
        var dt = new Date(), expiryTime = dt.setTime( dt.getTime() + 1000*5 );
        var expires = dt.toGMTString();

        if (form.first_name == "")
        {
            errors.first_name = "Please choose a First Name";
        }

        if (form.s_question == "-1")
        {
            errors.s_question = "Please choose a Secret Question";
        }
        if (form.s_answer == "")
        {
            errors.s_answer = "Please type an answer to your Secret Question";
        }
        if (form.address_co !== "")
        {
            set_cookie( 'address_co', form.address_co, expires, '/register', 'secure.xxx.com', true );
        }
        if (form.address == "")
        {
            errors.address = "Please type your mailing address";
        }
        if (form.address2 !== "")
        {
            set_cookie( 'address2', form.address2, expires, '/register', 'secure.xxx.com', true );
        }
        if (form.street_address !== "")
        {
            set_cookie( 'street_address', form.street_address, expires, '/register', 'secure.xxx.com', true );
        }
        if (form.zip == "")
        {
            errors.zip = "Please type a 5-digit Zip Code"
        }
        else if (form.zip.length != 5)
        {
            errors.zip = "Zip Code must be 5 digits";
        }
        else if (isNaN(form.zip))
        {
            errors.zip = "Zip Code must be a number";
        }


        if (form.phone == "")
        {
            errors.phone = "Please type your phone number";
        }
        if (form.referred_by !== "")
        {
            set_cookie( 'referred_by', form.referred_by, expires, '/register', 'secure.xxx.com', true );
        }
        if (form.cert_code !== "")
        {
            set_cookie( 'cert_code', form.cert_code, expires, '/register', 'secure.xxx.com', true );
        }
        if (!form.sel_hear_about)
        {
            errors.sel_hear_about = "Please choose how you heard about us";
        }
        if (form.hear_about !== "")
        {
            set_cookie( 'hear_about', form.hear_about, expires, '/register', 'secure.xxx.com', true );
        }
        if (form.hours !== "-1")
        {
            set_cookie( 'hours', form.hours, expires, '/register', 'secure.xxx.com', true );
        }

        return errors;
    }
                                fields='[
                            {"name":"name","view":"prefilled"},
                            {"name":"email"},
                            {"name":"password"},
                            {"name":"s_question","description":"Secret Question","type":"select","options":{"2":"In which city were you born?","4":"What is your favorite book?","3":"What is your favorite pets name?","6":"What is your favorite vacation spot?","1":"What is your mothers maiden name?"}},
                            {"name":"s_answer","type":"text","description":"Secret Answer"},
                            {"name":"first_name"},
                            {"name":"last_name"},                                                               ]' onvalidate="validate">