Как управлять «потоком» веб-приложения ASP.NET MVC (3.0), которое зависит от членства в Facebook, с помощью Facebook C # SDK? - PullRequest
1 голос
/ 06 января 2011

Я хочу полностью удалить стандартную систему членства ASP.NET и использовать Facebook только для членства в моем веб-приложении. Обратите внимание, это не вопрос приложения на холсте Facebook.

Как правило, в приложении ASP.NET у вас есть некоторые ключевые свойства и методы для управления "потоком" приложения.В частности: Request.IsAuthenticated, [Authorize] (в приложениях MVC), Membership.GetUser() и Roles.IsUserInRole() и другие.Похоже, [FacebookAuthorize] эквивалентно [Authorize].fbApp.Session != null по сути то же самое, что и Request.IsAuthenticated?

Кроме того, есть некоторая стандартная работа, которую я выполняю на всех контроллерах моего сайта.Поэтому я создал BaseController, который переопределяет OnActionExecuting(FilterContext).Обычно я заполняю ViewData профилем пользователя в этом действии.Повлияет ли производительность, если я позвоню fbApp.Get("me") в этом действии?

Я использую Facebook Javascript SDK для регистрации, что приятно и просто.Но это все на стороне клиента, и я с трудом собираюсь подумать о том, когда использовать клиентские вызовы facebook на серверной стороне.Будет момент, когда мне нужно будет получить пользовательский идентификатор Facebook и сохранить его в таблице «профиля» вместе с несколькими другими частями данных.Это, вероятно, лучше всего обработать на URL-адресе возврата из регистрационного плагина ... правильно?

На заметку, какие данные возвращаются с fbApp.Get("me")?

1 Ответ

2 голосов
/ 06 января 2011

Facebook C # SDK предоставляет фильтр действий под названием [FacebookAuthorize], который будет обрабатывать аутентификацию, как вы описали. И да, fbApp.Request == null - это правильный способ определить, аутентифицирован ли пользователь. Я думаю, что добавлю свойство в следующем выпуске под названием IsAuthenticated, чтобы упростить его.

Вы правильно используете Javascript SDK для входа в систему. В основном, как это работает, сторона Javascript создает cookie, который FacebookApp читает и проверяет. Для приложения без холста вы должны использовать Javascript SDK. Вы можете сделать все это вручную с помощью OAuth, но это будет огромной болью.

А что касается результата fbApp.Get ("я"), результатом является JsonObject. Вы можете получить к нему доступ двумя способами:

// Using dynamic (.Net 4.0 only)
var app = new FacebookApp();
dynamic me = app.Get("me");
string firstName = me.first_name;
string lastName = me.last_name;
string email = me.email;

// Using IDictionary<string, object> (.Net 3.5, .Net 4.0, WP7)
var app = new FacebookApp();
var me = (IDicationary<string,object>)app.Get("me");
string firstName = (string)me["first_name"];
string lastName = (string)me["last_name"];
string email = (string)me["email"];

У нас есть больше примеров кода на нашей Codeplex wiki .

...