Social logowanie

Pamiętałam, że Maciek Aniserowicz wspominał kiedyś o social logowaniu w poście. Postanowiłam, że zrobię tak samo. Zainstalowałam pakiet SimpleAuthentication, utworzyłam klasę Provider, przeszłam w aplikacji do url https://localhost/authentication/redirect/facebook i nic? Ale jak to? Przecież miało działać, a tu same błędy.
Okazało się, że potrzebuję jeszcze Autofac i Glimpse. Ok, zrobione. No i nadal nie działa:

error

Tutaj z pomocą przyszedł pewien kolega – okazało się, że na odpowiedniej stronie trzeba dodać domenę, na której jest aplikacja:

Okazało się to całkiem proste!

Dla Facebooka (wersja lokalna aplikacji) wygląda to następująco:

dbDev

fbDevurl

fbDevoAuth

Odpowiednie App Id oraz App Secret należy wpisać do Web.config.

<authenticationProviders>
<providers>
<add name="Facebook" key="11111111" secret="22222222" />
<add name="GitHub" key="33333333" secret="44444444" />
<add name="Google" key="55555555.apps.googleusercontent.com" secret="66666666" />
</providers>
</authenticationProviders>

Na produkcji oczywiście musiałam zarejestrować nową aplikację z nowymi kluczami i podmienić je w Web.config (najlepiej używając Transform w Web.Release.config).

<authenticationProviders>
<providers>
<add name="Facebook" key="99999999" secret="88888888" xdt:Transform="SetAttributes" xdt:Locator="Match(name)" />
<add name="GitHub" key="77777777" secret="66666666" xdt:Transform="SetAttributes" xdt:Locator="Match(name)" />
<add name="Google" key="55555555.apps.googleusercontent.com" secret="44444444" xdt:Transform="SetAttributes" xdt:Locator="Match(name)" />
</providers>
</authenticationProviders>

Rezultaty mojej pracy widać już na przy otwarciu aplikacji:

logIn.PNG

A po zalogowaniu w prawym górnym oknie aplikacji widać:

loggedUser

Dla zainteresowanych dorzucam jeszcze kod AuthenticationCallbackProvider:


public ActionResult Process(HttpContextBase context, AuthenticateCallbackData model)
{
var email = model.AuthenticatedClient.UserInformation.Email;
var name = model.AuthenticatedClient.UserInformation.Name;
var userName = model.AuthenticatedClient.UserInformation.UserName;
var picture = model.AuthenticatedClient.UserInformation.Picture;

var loggedUser = new User()
{
Id = Guid.NewGuid().ToString(),
Name = name,
ImageUrl = picture,
Email = email
};

return new RedirectToRouteResult(new RouteValueDictionary
{
{ "action", "SetUser" },
{ "controller", "User" },
{ "userJson", JsonConvert.SerializeObject(loggedUser) }
});
}

public ActionResult OnRedirectToAuthenticationProviderError(HttpContextBase context, string errorMessage)
{
return new RedirectResult("/", true);
}

PS – logowanie przez Google zadziałało mi tylko dla wersji szyfrowanej https, a nie działało dla http

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj /  Zmień )

Zdjęcie na Facebooku

Komentujesz korzystając z konta Facebook. Wyloguj /  Zmień )

Połączenie z %s