2015-10-26 14 views
10

Mam aplikację Xamarin.Forms i chcę zaimplementować jej funkcje uwierzytelniania na podstawie FaceBook i Azure. Sama autoryzacja działa, ale nie znalazłem sposób, aby uzyskać podstawowe informacje użytkownika z nim (imię i nazwisko, adres e-mail ...)Jak uzyskać podstawowe informacje o użytkowniku w aplikacji mobilnej Azure Mobile?

var user = await DependencyService.Get<IMobileClient>() 
      .LoginAsync(MobileServiceAuthenticationProvider.Facebook); 

Na stronie serwera

var mobileAppUser = (MobileAppUser)User; 
var facebookCredentials = 
    user.GetIdentityAsync<FacebookCredentials>().Result; 

mobileAppUser istnieje, ale jest facebookCredentials zawsze zero.

Moja aplikacja na platformie Azure to nowa mobilna aplikacja internetowa napisana w .net. Wszystkie jego funkcje działają świetnie, z wyjątkiem tego pytania uwierzytelniającego. Nie mogłem znaleźć właściwego sposobu rozwiązania tego problemu po stronie serwera lub po stronie klienta. Pls. Uwaga, moje pytanie dotyczy nowej wersji aplikacji mobilnych Azure, a nie starej klasycznej.

Czy byłbyś tak uprzejmy mi pomóc? Każdy przykładowy kod lub dokumentacja są mile widziane.

Z góry dziękuję!

+0

Nie wiem, czy to może pomóc, ale czuję, że to może: http: // www. azurefromthetrenches.com/how-to-using-facebook-to-authenticate-w-web-api-2-in-a-ative-mobile-application/ lub http://blogs.msdn.com/b/carlosfigueira/archive /2012/10/25/getting-user-information-on-azure-mobile-services.aspx lub http://stackoverflow.com/questions/25463125/azure-mobile-service-with-facebook-auth-get-user -info. Mam nadzieję, że doprowadzą cię do rozwiązania. Powodzenia. –

+0

Dzięki mojemu przyjacielowi przeczytałem kilka dokumentów, w tym te, ale one nie pomogły rozwiązać mojego problemu. – Tom

+2

Nie ma za co. Jestem smutna, że ​​ci nie pomogły, powodzenia. –

Odpowiedz

0

Korzystając z połączenia asynchronicznego, należy poczekać na zakończenie operacji, a po jej zakończeniu wynik będzie dostępny. Można to zrobić na wiele sposób, ale w tym przypadku najbardziej naturalne byłoby:

var facebookCredentials = await user.GetIdentityAsync<FacebookCredentials>(); 
// Here you can use your facebookCredentials variable: 
+0

Oczekiwanie na wynik zadania również oczekuje na zakończenie. – Tom

+2

Tak, masz rację. Nadal warto spróbować. Nigdy nie znam szczegółów implementacji. –

+0

Dziękuję bardzo, spróbowałem wcześniej, jak kilka innych drobiazgów. – Tom

5

zbyt długo komentarzu

Jeśli sprawdzeniu realizację GetIdentityAsync, zobaczysz następujące :

  • sprawdza, czy użytkownik jest uwierzytelniony (mówiłeś, że użytkownik jest uwierzytelniony, więc nie ma problemu tutaj)
  • czyta "EMA_RuntimeUrl" od konfiguracja (nie jest zerowa, ponieważ wtedy dostaniesz wyjątek)
  • sprawdza, czy token od usługodawcy jest ważny, czy nie. Jeśli nie, to zwraca null.

Uważam, że jest to problem, na który się natknąłeś. Szybkie wyszukiwanie w tym numerze prowadzi do pytania na pytanie: this.

Czy utworzyłeś EMA_RuntimeUrl ręcznie w aplikacji mobilnej w portalu Lazur w oknie Właściwości aplikacji i przypisano do adresu bramy?

+0

Dzięki! Ustawienia EMA_RuntimeUrl są tworzone automatycznie po utworzeniu aplikacji na platformie Azure. Nic nie zmieniłem. Jego wartością jest adres URL bramy, a po otwarciu tego adresu URL w przeglądarce pojawia się komunikat "Gateway is up". – Tom

+0

Myślę, że to ustawienie jest w porządku, a mój problem nadal istnieje. – Tom

+1

Zdecydowanie wygląda na problem z konfiguracją. Twój kod jest poprawny. Więc bez żadnych dodatkowych informacji trudno byłoby powiedzieć cokolwiek. [To] (https://github.com/Azure/azure-content/blob/master/articles/app-service-mobile/app-service-mobile-dotnet-backend-migrating-from-mobile-services.md# kwestie związane z uwierzytelnianiem) pomoc w migracji wspomina o "Dodawanie punktów końcowych bramy/znaku-* * jako dodatkowego identyfikatora URI przekierowania dla każdego dostawcy." i ma _ [AZURE.NOTE] _, które może również dotyczyć Facebooka. – Tamas

0

Cóż, nie wiem czy to naprawdę pomoże, ale spróbuję. Jak rozumiem, do tego celu używasz identyfikatora asp.net z facebookowym oprogramowaniem pośredniczącym. Używam tego również, ale z google oauth middleware zamiast facebooka. Jeśli mam rację, powinno to być rozwiązanie:

Jeśli tak, podczas wysyłania żądania uwierzytelnienia za pomocą oprogramowania pośredniego podasz adres URL wywołania zwrotnego, który zostanie przekierowany po pomyślnym uwierzytelnieniu u dostawcy (facebook). Aby poprosić o autoryzację zewnętrzną, zadzwoń pod numer ChallangeResult, podając ten adres URL. Po uzyskaniu tego oddzwonienia można użyć metody GetExternalLoginInfoAsync() z interfejsu IAuhtnticationManager jako pierwszego kroku w metodzie wywołania zwrotnego. Aby uzyskać instancję IAuthenticationManager, można odczytać właściwość HttpContext.GetOwinContext().Authentication.Po tym można uzyskać wszystkie niezbędne informacje na temat użytkownika, jak IIdentity realizacji - GetExternalLoginInfoAsync() zwrotów ExternalIdentity instancji

nadzieję, że pomoże

Powiązane problemy