Come controllare il “flusso” di un ASP.NET MVC (3.0) web app che si basa sull'appartenenza Facebook, Facebook C # SDK?

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

  •  25-09-2019
  •  | 
  •  

Domanda

Voglio rimuovere completamente il sistema di appartenenza ASP.NET standard ed usare Facebook solo per l'adesione mio web app. Nota, questo non è un Facebook tela domanda app.

In genere, in un app ASP.NET si hanno alcune proprietà e metodi chiave per controllare il "flusso" di un app. In particolare: Request.IsAuthenticated, [Authorize] (in app MVC), Membership.GetUser() e Roles.IsUserInRole(), tra gli altri. Sembra [FacebookAuthorize] è equivalente a [Authorize]. È fbApp.Session != null essenzialmente la stessa di Request.IsAuthenticated?

Inoltre, c'è un po 'di lavoro standard che faccio in tutti i controller nel mio sito. Così ho costruito un BaseController che le sostituzioni OnActionExecuting(FilterContext). In genere, io popolo Viewdata con il profilo dell'utente all'interno di questa azione. prestazioni soffrirebbero se ho fatto una chiamata a fbApp.Get("me") in questa azione?

Io uso il JavaScript SDK per fare la registrazione, che è bello e facile. Ma questo è tutto sul lato client, e sto avendo un momento difficile avvolgere la mia mente intorno quando utilizzare le chiamate sul lato client facebook contro server-side. Ci sarà un momento in cui ho bisogno di afferrare facebook dell'utente UID e conservarla in un tavolo "profilo" insieme a pochi altri bit di dati. Che probabilmente sarebbe meglio gestito sulla URL di ritorno dal plugin di registrazione ... giusto?

Una nota a parte, quali sono i dati viene restituito da fbApp.Get("me")?

È stato utile?

Soluzione

Il Facebook C # SDK fornisce un filtro di azione denominato [FacebookAuthorize] che gestirà l'autenticazione come si descrive. E sì, fbApp.Request == null è il modo corretto per determinare se l'utente è autenticato. Penso che aggiunge una proprietà sulla prossima release chiamato IsAuthenticated per rendere più facile.

Si sono corretti nel usando il Javascript SDK per il login. In pratica, come funziona è il lato Javascript crea il cookie che FacebookApp legge e verifica. Per un'applicazione non di tela che, fondamentalmente, di utilizzare il Javascript SDK. Si potrebbe fare tutto manualmente con OAuth, ma che sarebbe un dolore enorme.

E per quanto riguarda il risultato di fbApp.Get ( "me") il risultato è un JsonObject. È possibile accedere in due modi:

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

Abbiamo più esempi di codice sul nostro Codeplex wiki .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top