Я согласен с аутентификацией против регистрации, но я думаю, что API Facebook не очищает cookie аутентификации правильно, потому что он все еще действителен, если вы очистите форму или выйдете из системы (я использую регистрацию iFrame), поэтому я предполагаю, что яВ поисках лучшей практики, поскольку, когда я получаю подписанный запрос, идентификатор является аутентифицированным пользователем, поэтому единственное решение, которое у меня есть сейчас, - это проверка на наличие String.IsEmptyOrNull (в поле пароля) - что говорит мне, что этот пользовательне использовал регистрацию в фейсбуке).Я думаю, что это хак, но если кто-нибудь знает «правильный» способ получить подписанный запрос и преобразовать его в объект, прокомментируйте мой подход.Удивительно, что нам все еще нужно написать тонну кода для того, чтобы получить прямой подход к получению того, что нам нужно.Я видел множество жалоб на разработку FB, и они в основном верны - Google API не так расстраивает, и FB делает практически невозможным тестирование и в разных средах (не говоря уже о знаменитых проблемах с cookie с localhost).
Проблема: App.UserId остается аутентифицированным пользователем после очистки формы iframe или выхода из FB - см. Рисунок.
Решение: проверьте наличие поля пароля - это говорит нам о том, что у нас нет-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