2012-02-12 23 views
6

Jestem nowicjuszem w MVC i nowością w tworzeniu stron internetowych razem. Mam około 7 lat doświadczenia programistycznego, ale w usługach, bazach danych, modelach obiektowych itp. W zasadzie w rozwoju pośrednim i back-end. Próbuję nauczyć się ASP.NET i postanowiłem zbudować witrynę przy użyciu MVC3 dla osobistej strony dla siebie. Będę go hostować z konta na dotnet-hosts.com. Oto moje pytanie ... Nie mam domeny i będę korzystać z wbudowanego dostawcy członkostwa. Zauważyłem w auto wygenerowany kod, który został stworzony, kiedy dodany szablon projektu, który w AccountController w metodzie ChangePassword (ChangePasswordModel modelu) istnieje ta linia kodu ...MVC3 + Jak uzyskać bieżącą zalogowaną nazwę użytkownika użytkownika

MembershipUser currentUser = Membership.GetUser(User.Identity.Name, true /* userIsOnline */); 

Moje pytanie jest szczególnie wokół User.Identity.Name , wygląda na to, że zwróciłby nazwę użytkownika Windows, tak jak zrobiłby to Environment.UserName. Użyłem szablonu Visual Studio (Mobile Ready HTML5 MVC.NET), ponieważ chcę móc obsługiwać klientów z dowolnego urządzenia ... Windows PC, Apple, Windows Phone, iPhone, etc ... Jeśli połączenie z User.Identity.Name czy to prawda, więc chciałbym zapytać, jak to działa na urządzeniach, które nie są Windowsowe jak iPhone? Jeśli moje założenie jest poprawne, że będzie to działać tylko na komputerach Windows z domeną, jak mogę to osiągnąć? czy powinienem użyć pamięci podręcznej? Jeśli tak, to czy mogę pobrać nazwę użytkownika i jego adres IP, które będą używane jako klucz pamięci podręcznej ze strony Uwierzytelnianie?

Moje pytanie na wysokim poziomie to ... W jaki sposób mogę uzyskać nazwę użytkownika aktualnie zalogowanego użytkownika niezależnie od urządzenia/platformy? Wiem, że to pytanie prawdopodobnie nie zostało napisane dobrze i może być trudne do zrozumienia ... Przepraszam za to. Jestem nowy w tworzeniu stron internetowych i staram się zmoczyć stopy i chciałbym rozpocząć korzystanie z najnowszych technologii.

Odpowiedz

4

Tak jak powiedziałeś, User.Identity.Name jest rzeczywiście poprawny. do zwrócenia nazwy zalogowanego użytkownika. Ale sekcja członkostwa, jak powiedziałeś, udostępnia tylko konta systemu Windows. Możesz używać podobnych bez użytkownika kont systemu Windows, aby pracować w każdym scenariuszu i nadal można zweryfikować w systemie Windows, jeśli jest obecny. Jeśli wywołasz go bez członkostwa i postępujesz zgodnie z domyślnym szablonem MVC3, powinien on działać poprawnie.

String Username = User.Identity.Name; 

Kiedy użytkownik loguje się przy użyciu MVC3 szablonu tworzy authcookie. Zobacz kod kontrolera konta. Tutaj przekazywane są do niego dwa parametry. Nazwa użytkownika i utrzymanie (po zamknięciu przeglądarki - logowanie jest nadal buforowane).

Nazwa użytkownika jest polem łańcuchowym, które nazywa się przez User.Identity.Name i w rzeczywistości, wszystko można w nim umieścić i nie jest w żaden sposób powiązane z logowaniem systemu Windows.

Można przetestować logowanie za pomocą wybranej metody, a jeśli tak, ustawić plik cookie za pomocą metody authcookie. (jest to enklawa). I ustaw nazwę użytkownika, jak chcesz. A jeśli twoja weryfikacja użytkownika zakończy się niepowodzeniem, nie twórz go i nie zmieniaj z powrotem na stronę.

Zobacz przykładowy kod. To wszystko z pamięci, ponieważ nie mam kodu infront mnie dla odniesienia. Ale wszystko to w kontrolerze konta, akcja logowania.

Po ustawieniu pliku cookie stan logowania użytkowników jest buforowany dla sesji. Musisz upewnić się, że użytkownik jest zalogowany podczas odwiedzania strony internetowej. W przeciwnym razie logowanie będzie bezcelowe. Jest to prosty atrybut kontrolera/akcji.

Uwaga: nie rób tego do konta/kontrolera logowania, ponieważ nie będziesz mógł odwiedzić strony logowania, ponieważ nie jesteś zalogowany.

[Authorize] 
public ActionResult DoSomething() 
{ 
    // ... 
} 

Mam nadzieję, że pomogłem.

6

Połączenie jest prawidłowe. Numer User.Identity.Name jest wypełniany przez dowolnego dostawcę uwierzytelniania - uwierzytelnianie systemu Windows, uwierzytelnianie formularzy, niestandardowy dostawca uwierzytelniania lub cokolwiek innego. Nie jest związany z konkretnym "typem" użytkownika. Dostawca uwierzytelniania jest odpowiedzialny za upewnienie się, że obiekt Identity odpowiada bieżącemu użytkownikowi na każde żądanie. Zazwyczaj ta część jest zajęta wykorzystaniem kombinacji plików cookie i bazy danych.

Szablon MVC (choć nie miałem spojrzeć na szablonie, ponieważ MVC 2) używa ASP.NET za Membership klasy, który z kolei używa dostawcy członkostwa - na przykład SqlMembershipProvider lub ActiveDirectoryMembershipProvider - dawnych sklepach użytkownicy dane uwierzytelniające (nazwa użytkownika i hasło itp.) w bazie danych SQL Server, ta ostatnia korzysta z Active Directory (tj. głównie z logów systemu Windows). SqlMembershipProvider jest ustawieniem domyślnym, a MVC jest skonfigurowany do używania lokalnego pliku bazy danych SQLExpress jako magazynu użytkowników.

Dostawca uwierzytelniania, który jest realizowany w ramach projektu szablonu wykorzystuje FormsAuthentication, co czyni procedurę logowania za pomocą prostego formularza HTML (jeden w widoku LogOn) i utrzymuje użytkownikowi podpisany w drodze zaszyfrowanym pliku cookie. Działa na dowolnej platformie.

Konfiguracja zarówno FormsAuthentication i SqlMembershipProvider można znaleźć w pliku web.config (jednego w głównym miejscu). Tam możesz znaleźć ciągi połączeń dla bazy danych SQLExpress (i np. Zmienić je tak, aby używały "prawdziwego" serwera SQL), limit czasu logowania itp.

(Zauważ, że możesz z łatwością wykonać wiele takich konfiguracji w GUI za pomocą przycisku "Konfiguracja ASP.NET" na pasku narzędzi Eksploratora rozwiązań w Visual Studio - zapewnia również łatwy sposób konfiguracji pierwszych użytkowników).

Krótko mówiąc, wszystko gotowe do pracy - i nie blokuje użytkowników spoza systemu Windows.

Powiązane problemy