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