Como controlar o "fluxo" de um aplicativo Web ASP.NET MVC (3.0) que se baseia na associação do Facebook, com o Facebook C# SDK?

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

  •  25-09-2019
  •  | 
  •  

Pergunta

Quero remover totalmente o sistema de associação ASP.NET padrão e usar o Facebook apenas para a associação do meu aplicativo da web. Observe que esta não é uma pergunta do aplicativo de tela do Facebook.

Normalmente, em um aplicativo ASP.NET, você tem algumas propriedades e métodos importantes para controlar o "fluxo" de um aplicativo. Notavelmente: Request.IsAuthenticated, [Authorize] (em aplicativos MVC), Membership.GetUser() e Roles.IsUserInRole(), entre outros. Parece [FacebookAuthorize] é equivalente a [Authorize]. É fbApp.Session != null essencialmente o mesmo que Request.IsAuthenticated?

Além disso, há algum trabalho padrão que faço em todos os controladores no meu site. Então eu construí um controlador de base que substitui OnActionExecuting(FilterContext). Normalmente, eu preento o ViewData com o perfil do usuário nessa ação. O desempenho sofreria se eu fizesse uma ligação para fbApp.Get("me") Nesta ação?

Eu uso o SDK JavaScript do Facebook para fazer registro, o que é agradável e fácil. Mas isso é tudo do lado do cliente, e estou tendo dificuldade em entender quando usar chamadas no Facebook do lado do cliente em relação ao servidor. Haverá um ponto em que eu precisar pegar a UID do Facebook do usuário e armazená -lo em uma tabela "perfil" junto com alguns outros bits de dados. Provavelmente seria melhor manuseado no URL de retorno do plugin de registro ... correto?

Em uma nota lateral, de que dados são retornados fbApp.Get("me")?

Foi útil?

Solução

O Facebook C# SDK fornece um filtro de ação chamado [FacebookAuthorize] que lidará com a autenticação como você descreve. E sim, fbapp.request == null é a maneira correta de determinar se o usuário é autenticado. Acho que vou adicionar uma propriedade na próxima versão chamada isauthenticated para facilitar.

Você está correto ao usar o JavaScript SDK para login. Basicamente, como funciona é o lado JavaScript cria o cookie que o FacebookApp lê e verifica. Para um aplicativo não canvas, você basicamente precisa usar o JavaScript SDK. Você poderia fazer tudo manualmente com Oauth, mas isso seria uma dor enorme.

E com relação ao resultado do fbapp.get ("me"), o resultado é um JsonObject. Você pode acessar duas maneiras:

// 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"];

Temos mais amostras de código em nosso Wiki CodePlex.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top