Implementowanie niestandardowego dostawcy magazynu MySQL dla systemu ASP.NET Identity
Autor : Raquel Soares De Almeida, Suhas Joshi, Tom FitzMacken
ASP.NET Identity to rozszerzalny system, który umożliwia tworzenie własnego dostawcy magazynu i podłączanie go do aplikacji bez ponownego działania aplikacji. W tym temacie opisano sposób tworzenia dostawcy magazynu MySQL dla usługi ASP.NET Identity. Aby zapoznać się z omówieniem tworzenia niestandardowych dostawców magazynu, zobacz Overview of Custom Storage Providers for ASP.NET Identity (Omówienie niestandardowych dostawców magazynu dla tożsamości ASP.NET).
Aby ukończyć ten samouczek, musisz mieć Visual Studio 2013 z aktualizacją Update 2.
Ten samouczek obejmuje następujące elementy:
- Pokaż, jak utworzyć wystąpienie bazy danych MySQL na platformie Azure.
- Pokaż, jak używać narzędzia klienckiego MySQL (MySQL Workbench) do tworzenia tabel i zarządzania zdalną bazą danych na platformie Azure.
- Pokaż, jak zastąpić domyślną implementację magazynu tożsamości ASP.NET implementacją niestandardową w projekcie aplikacji MVC.
Ten samouczek został pierwotnie napisany przez Raquela Soaresa De Almeida i Ricka Andersona ( @RickAndMSFT ). Przykładowy projekt został zaktualizowany dla tożsamości 2.0 przez Suhas Joshi. Temat został zaktualizowany dla tożsamości 2.0 przez Toma FitzMacken.
Pobieranie ukończonego projektu
Na końcu tego samouczka będziesz mieć projekt aplikacji MVC z usługą ASP.NET Identity współpracującą z bazą danych MySQL hostowaną na platformie Azure.
Ukończonego dostawcę magazynu MySQL można pobrać na stronie AspNet.Identity.MySQL (GitHub).
Kroki, które wykonasz
W tym samouczku wykonasz następujące elementy:
- Tworzenie bazy danych MySQL na platformie Azure
- Tworzenie tabel ASP.NET Identity w programie MySQL
- Tworzenie aplikacji MVC i konfigurowanie jej do korzystania z dostawcy MySQL
- Uruchamianie aplikacji
Ten temat nie obejmuje architektury ASP.NET Identity i decyzji, które należy podjąć podczas implementowania dostawcy magazynu klienta. Aby uzyskać te informacje, zobacz Overview of Custom Storage Providers for ASP.NET Identity (Omówienie niestandardowych dostawców magazynu dla tożsamości ASP.NET).
Przegląd klas dostawcy magazynu MySQL
Przed przejściem do kroków tworzenia dostawcy magazynu MySQL przyjrzyjmy się klasom tworzącym dostawcę magazynu. Do zarządzania użytkownikami i rolami będą potrzebne klasy, które zarządzają operacjami i klasami bazy danych, które są wywoływane z aplikacji.
Klasy magazynu
- IdentityUser — zawiera właściwości użytkownika.
- UserStore — zawiera operacje dodawania, aktualizowania lub pobierania użytkowników.
- IdentityRole — zawiera właściwości ról.
- RoleStore — zawiera operacje dodawania, usuwania, aktualizowania i pobierania ról.
Klasy warstw dostępu do danych
W tym przykładzie klasy warstwy dostępu do danych zawierają instrukcje SQL do pracy z tabelami; Jednak w kodzie możesz chcieć użyć mapowania relacyjnego (ORM), takiego jak Entity Framework lub NHibernate. W szczególności aplikacja może doświadczyć niskiej wydajności bez maszyny ORM, która obejmuje leniwe ładowanie i buforowanie obiektów.
- MySQLDatabase — zawiera połączenie bazy danych MySQL i metody wykonywania operacji bazy danych. Wystąpienia magazynu użytkowników i magazynu ról są tworzone przy użyciu wystąpienia tej klasy.
- RoleTable — zawiera operacje bazy danych dla tabeli, w której są przechowywane role.
- UserClaimsTable — zawiera operacje bazy danych dla tabeli, w której są przechowywane oświadczenia użytkowników.
- UserLoginsTable — zawiera operacje bazy danych dla tabeli, w której są przechowywane informacje logowania użytkownika.
- UserRoleTable — zawiera operacje bazy danych dla tabeli, w której są przypisywani użytkownicy.
- UserTable — zawiera operacje bazy danych dla tabeli, która przechowuje użytkowników.
Tworzenie wystąpienia bazy danych MySQL na platformie Azure
- Zaloguj się do witryny Azure Portal.
- Kliknij pozycję +NOWY w dolnej części strony, a następnie wybierz pozycję SKLEP.
- W kreatorze Wybieranie i dodawanie wybierz pozycję ClearDB MySQL Database i kliknij strzałkę w prawym dolnym rogu okna dialogowego.
- Zachowaj domyślny plan Bezpłatny i zmień wartość pola Nazwa na IdentityMySQLDatabase. Wybierz najbliższy region, a następnie kliknij strzałkę dalej.
- Kliknij znacznik wyboru, aby ukończyć tworzenie bazy danych.
- Po utworzeniu bazy danych możesz zarządzać nią z poziomu karty ADD-ONS w portalu zarządzania.
- Informacje o połączeniu z bazą danych można uzyskać, klikając pozycję INFORMACJE O POŁĄCZENIU w dolnej części strony.
- Skopiuj parametry połączenia, klikając przycisk kopiowania i zapisując go, aby można było użyć ich później w aplikacji MVC.
Tworzenie tabel ASP.NET Identity w bazie danych MySQL
Instalowanie narzędzia MySQL Workbench w celu nawiązywania połączenia z bazą danych MySQL i zarządzania nią
- Instalowanie narzędzia MySQL Workbench ze strony pobierania bazy danych MySQL
- Uruchom aplikację, a następnie kliknij przycisk MySQLConnections + w celu dodania nowego połączenia. Użyj danych parametrów połączenia skopiowanych z bazy danych Azure MySQL utworzonej wcześniej w tym samouczku.
- Po nawiązaniu połączenia otwórz nową kartę Zapytanie ; Wklej polecenia z bazy danych MySQLIdentity.sql do zapytania i wykonaj je w celu utworzenia tabel bazy danych.
- Masz teraz wszystkie tabele niezbędne ASP.NET Identity utworzone w bazie danych MySQL hostowanej na platformie Azure, jak pokazano poniżej.
Tworzenie projektu aplikacji MVC na podstawie szablonu i konfigurowanie go do używania dostawcy MySQL
W razie potrzeby zainstaluj program Visual Studio Express 2013 for Web lub Visual Studio 2013 z aktualizacją Update 2.
Pobierz ASP.NET. Projekt Identity.MySQL z usługi GitHub
- Przejdź do adresu URL repozytorium pod adresem AspNet.Identity.MySQL (GitHub).
- Pobierz kod źródłowy.
- Wyodrębnij plik .zip do folderu lokalnego.
- Otwórz rozwiązanie AspNet.Identity.MySQL i skompiluj je.
Tworzenie nowego projektu aplikacji MVC na podstawie szablonu
Kliknij prawym przyciskiem myszy rozwiązanie AspNet.Identity.MySQL i dodaj nowy projekt
W oknie dialogowym Dodawanie nowego projektu wybierz pozycję Visual C# po lewej stronie, a następnie pozycję Sieć Web , a następnie wybierz pozycję ASP.NET Aplikacja internetowa. Nadaj projektowi nazwę IdentityMySQLDemo; a następnie kliknij przycisk OK.
W oknie dialogowym Nowy projekt ASP.NET wybierz szablon MVC z opcjami domyślnymi (obejmującymi indywidualne konta użytkowników jako metodę uwierzytelniania) i kliknij przycisk OK.
W Eksplorator rozwiązań kliknij prawym przyciskiem myszy projekt IdentityMySQLDemo i wybierz pozycję Zarządzaj pakietami NuGet. W oknie dialogowym wyszukiwania wpisz Identity.EntityFramework. Wybierz ten pakiet na liście wyników, a następnie kliknij przycisk Odinstaluj. Zostanie wyświetlony monit o odinstalowanie pakietu zależności EntityFramework. Kliknij pozycję Tak, ponieważ nie będziemy już tego pakietu w tej aplikacji.
Kliknij prawym przyciskiem myszy projekt IdentityMySQLDemo, wybierz pozycję Dodaj, Odwołanie, Rozwiązanie, Projekty; wybierz projekt AspNet.Identity.MySQL i kliknij przycisk OK.
W projekcie IdentityMySQLDemo zastąp wszystkie odwołania do
using Microsoft.AspNet.Identity.EntityFramework;
with
using AspNet.Identity.MySQL;
W pliku IdentityModels.cs ustaw parametr ApplicationDbContext , aby pochodził z bazy danych MySqlDatabase i uwzględnij konstruktor, który przyjmuje pojedynczy parametr o nazwie połączenia.
public class ApplicationDbContext : MySQLDatabase { public ApplicationDbContext(string connectionName) : base(connectionName) { } public static ApplicationDbContext Create() { return new ApplicationDbContext("DefaultConnection"); } }
Otwórz plik IdentityConfig.cs. W metodzie ApplicationUserManager.Create zastąp wystąpienie klasy UserManager następującym kodem:
var manager = new ApplicationUserManager( new UserStore<ApplicationUser>( context.Get<ApplicationDbContext>() as MySQLDatabase));
Otwórz plik web.config i zastąp ciąg DefaultConnection tym wpisem, zastępując wyróżnione wartości parametrami połączenia bazy danych MySQL utworzonymi w poprzednich krokach:
<add name="DefaultConnection" connectionString="Database=IdentityMySQLDatabase; Data Source=<DataSource>;User Id=<UserID>;Password=<Password>" providerName="MySql.Data.MySqlClient" />
Uruchamianie aplikacji i nawiązywanie połączenia z bazą danych MySQL
Kliknij prawym przyciskiem myszy projekt IdentityMySQLDemo i wybierz pozycję Ustaw jako projekt startowy
Naciśnij klawisze Ctrl + F5 , aby skompilować i uruchomić aplikację.
Kliknij kartę Zarejestruj w górnej części strony.
Wprowadź nową nazwę użytkownika i hasło, a następnie kliknij pozycję Zarejestruj.
Nowy użytkownik jest teraz zarejestrowany i zalogowany.
Wstecz do narzędzia MySQL Workbench i sprawdź zawartość tabeli IdentityMySQLDatabase. Sprawdź tabelę użytkowników pod kątem wpisów podczas rejestrowania nowych użytkowników.
Następne kroki
Aby uzyskać więcej informacji na temat włączania innych metod uwierzytelniania w tej aplikacji, zobacz Create an ASP.NET MVC 5 App with Facebook and Google OAuth2 and OpenID Sign-on (Tworzenie aplikacji MVC 5 przy użyciu usług Facebook i Google OAuth2 i OpenID).
Aby dowiedzieć się, jak zintegrować bazę danych z usługą OAuth i skonfigurować role w celu ograniczenia dostępu użytkowników do aplikacji, zobacz Deploy a Secure ASP.NET MVC 5 app with Membership, OAuth, and SQL Database to Azure (Wdrażanie aplikacji Secure ASP.NET MVC 5 z członkostwem, OAuth i SQL Database na platformie Azure).