清除所有Facebook个人资料字段并手动填写注册表格?

时间:2011-01-04 23:26:50

标签: facebook facebook-c#-sdk

您知道用户如何清除预先填充的表单并恢复正常注册?

我正在开发一个iframe注册应用,当用户清除表单字段时,看起来signed_request仍然有效(如果加载时用户已登录到facebook)。

任何人都知道我们应该如何知道用户是否真的使用FB信息或注册信息?我以前认为会话会告诉我们,但我的会话仍然有效 用户点击“清晰表格”。

// Check to make sure we have a signed_request object, if not, redirect to home
var sreq = Request.Form["signed_request"];
if (string.IsNullOrEmpty(sreq))
{
 Response.Redirect(WebConstants.SiteConstants.Home);
} 

var app = new FacebookApp();

如果用户清除FORM!

,仍会填充app.UserId

如何检测到我们真的想要与FB集成?

谢谢!

2 个答案:

答案 0 :(得分:1)

我同意身份验证与注册,但我认为Facebook API没有正确清除身份验证cookie,因为如果您清除表单或注销(我正在使用iFrame注册)它仍然有效,所以我想我是寻找最佳实践,因为当我收到签名请求时,id是经过身份验证的用户,因此我现在唯一的解决方法是检查String.IsEmptyOrNull(在密码字段上) - 这告诉我这个用户没有使用facebook注册)。我认为这是一个黑客,但如果有人知道采取签名请求并将其转换为对象的“正确”方式,请评论我的方法。令人惊讶的是,我们仍然需要编写大量代码,以便获得我们需要的直接方法。我已经看到很多关于FB开发的抱怨并且它们大多是真的 - 谷歌API并不令人沮丧,FB也几乎不可能测试不同的环境(更不用说localhost的着名cookie问题了)。

问题:在清除iframe表单或注销FB后,App.UserId仍然是经过身份验证的用户 - 请参阅图。

解决方案:检查密码字段的存在 - 这告诉我们我们正在进行非fb注册....

C#.NET适用于所有少数人。

// Check to make sure we have a signed_request object, if not, redirect to home var sreq = Request.Form["signed_request"]; if (string.IsNullOrEmpty(sreq)) { Response.Redirect(WebConstants.SiteConstants.Home); }

    JObject meObject = null;
    var app = new FacebookApp();
    if (app.SignedRequest != null)
    {
        meObject = JObject.Parse(app.SignedRequest.Dictionary["registration"].ToString());
        // Access meObject            
        JavaScriptSerializer ser = new JavaScriptSerializer();
        fbReg = ser.Deserialize<FBRegistration>(meObject.ToString());
        if (fbReg != null)
        {
            // 02 Feb 2011 - MCS - bug in facebook API, does not delete cookie if logout of FB
            // We check to see if we have password - then - we know we can check the UserId
            if (String.IsNullOrEmpty(fbReg.password))
            {
                // FB Registration
                FacebookUserId = app.UserId;
            }
            else
            {
                FacebookUserId = 0;
                // Non FB Registration

答案 1 :(得分:0)

注册和身份验证是两个完全不同的事情。仅仅因为用户“清除”表单并不会将它们记录在Facebook之外。 C#SDK只是检测signed_request是否存在且是否有效。