Come controllare il “flusso” di un ASP.NET MVC (3.0) web app che si basa sull'appartenenza Facebook, Facebook C # SDK?
-
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")
?
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 .