您知道用户如何清除预先填充的表单并恢复正常注册?
我正在开发一个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集成?
谢谢!
答案 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是否存在且是否有效。