
** Clicky-click for da GitHub project **
IMO, zapomnieć przechowywanie nazw użytkownika i haseł. To szalona rozmowa! Pozwól użytkownikom logować się za pomocą swoich danych z Facebooka, Google lub Twittera. To 80% za wspólne strony internetowe.
Uwierzytelnienie i przechowywanie danych uwierzytelniających to dwa różne zadania IMO. Na przykład, nie obchodzi mnie, gdzie uwierzytelniasz się przeciwko .. i kiedy to robisz .. Nie obchodzi mnie, jak przechowujesz te dane :)
Osobiście chciałbym przechowywać go w RavenDb .. ale to jest moje osobisty wybór.
Jako takie -> zachowanie tych dwóch zadań SEPARATE jest (IMO) kluczowe.

Więc lets look at some codez ....
public ActionResult AuthenticateCallback(string providerKey)
{
// SNIP SNIP SNIP SNIP
var model = new AuthenticateCallbackViewModel();
try
{
// SNIP SNIP SNIP SNIP
// Complete the authentication process by retrieving the UserInformation from the provider.
model.AuthenticatedClient = _authenticationService.CheckCallback(providerKey, Request.Params, state.ToString());
// Create a new user account or update an existing account.
// Whatever you end up doing, this is the part u want to
// pass this data to your repository (eg. RavenDb, Sql Server, etc)
// I'll use RavenDb in this example...
// And yes .. this is a contrite example. U might want to check for
// existing email or id or whatever u need to do, etc.
var myUser = Mapper.Map(model.AuthenticatedClient);
session.Store(myUser);
session.SaveChanges();
// SNIP SNIP SNIP SNIP
}
catch (Exception exception)
{
model.Exception = exception;
}
return View(model);
}
Więc spójrzmy na to, co zrobiłem.Wyciągnąłem wszelkie gadatliwe rzeczy (sprawdzanie wartości, itp.), Które są po prostu szumem w odpowiedzi na to pytanie.
Po pierwsze, obsługuję wywołanie zwrotne Authenticate. Na przykład. Właśnie wyjechałem na Facebooka i mówi się "tak! TY JESTEŚ ... i wraca do mojej witryny z pewnymi danymi, o które prosiłem.
Dalej ... otrzymujemy dane z Facebooka .. ale może nie być to format, który chcemy umieścić w RavenDb. Więc konwertuję ze starego formatu na nową, połyskującą klasę User
, którą włożysz do swojego Db.
Po trzecie - przechowuję to w Db. Tutaj można zrobić dowolną niestandardową logikę DB
to wszystko.
M O D U L a R i Z E t H a H I S T T
The.End.
Przepraszam .. zostało jeszcze kilka godzin przed Apokalipsą. Muszę się przygotować.
Zrobiłem dokładnie to. Moją potrzebą jest zidentyfikowanie użytkownika, a nie uwierzytelnianie - mogą to zrobić wbrew temu, co jest. To działa. Teraz, gdy zapisałem użytkownika w moim DB, muszę go użyć razem z systemem członkowskim ASP.NET. Więc mogę oznaczać akcje za pomocą [Authorize] i [AllowAnonymous], zwracaj adres URL itp wbudowanych funkcji w ASP.NET. Jak mogę to zrobić? Z tym: http://www.codethinked.com/setting-up-authentication-in-aspnet-mvc – esbenr
@esbenr Aby użyć atrybutów '[Authorize]', etc .. ty ** NIE ** (i ja powtórz, ** NIE **) musi używać systemu członkostwa ASP.NET. ** PROSIMY NIE KORZYSTAĆ, ŻE W ZAKRESIE JAKICHKOLWIEK OKOLICZNOŚCI ** (Google z 1000000 powodów). Aby wykorzystać "[Authorize]", itp. Po prostu trzeba użyć informacji o używaniu przechowywać w 'IPrincipal' i' IIdentity' (tak, 2x I's). Po prostu utwórz nowy "GenericPrincipal", a następnie dodaj nowy "GenericIdentity". Google dla tych, którzy mają więcej kodu :) –
Dzięki, to właśnie skończyłem. Użyłem tylko biletu Auth + cookie, aby uruchomić statyczną funkcję użytkownika USER - działa jak urok :-) Ta metoda podaje wiele miejsc w Internecie. BTW: Stworzyłem niestandardową implementację IPYNciple i niestandardową implementację IIdentity. w związku z tym chciałem więcej właściwości w moim kontekście użytkownika. Dzięki za odpowiedź./esbenr – esbenr