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

StackOverflow https://stackoverflow.com/questions/4610851

  •  25-09-2019
  •  | 
  •  

Вопрос

Я хочу полностью удалить стандартную систему членства ASP.NET и использовать Facebook только для членов моего веб-приложения. ПРИМЕЧАНИЕ, это не вопрос на приложении Facebook Canvas.

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

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

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

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

Это было полезно?

Решение

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

Вы правы в использовании JavaScript SDK для входа в систему. В основном, как это работает, это сторона JavaScript создает печенье, которое FacebookApp гласит и проверяет. Для приложения без холма вы в основном должны использовать JavaScript SDK. Вы могли бы сделать все это вручную с ОАУТ, но это было бы огромной болью.

И относительно результата 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top