2012-09-27 13 views

Odpowiedz

9

tworzę MySqlSimpleMembershipProvider na GitHub i uczynić przykładowe projekty.

https://github.com/xyz37/MySqlSimpleMembershipProvider

To wszystko.

Dziękuję za odpowiedź na to pytanie.

Kliknij aby Przykładowy zrzut ekranu: https://raw.github.com/xyz37/MySqlSimpleMembershipProvider/master/_ScreenShot/SimpleMembershipProviderTest.png

+0

Oto odpowiedź, której właśnie użyłem Aplikacja Kim i działa – Diin

+0

Dobra robota Kim, kontynuuj dobrą pracę! – ssanchezz23

+0

@Kim Ki Won, Próbowałem dodać rozszerzenia do mojego projektu z ograniczonym sukcesem.Największy problem to kontekst DB. Masz 'UserProfile' klasy w projekcie MySql.Web.Extension, który jest bardzo podobny do częściowej klasy "UserProfile" dostarczanej z szablonem MVC4. –

2

Niestety, nie.

SimpleMembershipProvider jest ostatecznie pochodną klasy dobrego, starego MembershipProvider, którą wszyscy kochamy i nienawidzimy.

Jest tam, ponieważ ludziom nie podobało się, ile abstrakcyjnych funkcji trzeba zastąpić, aby uzyskać niestandardową pracę. Jest to więc bardzo uproszczona implementacja MembershipProvider. Powinieneś cofnąć ponowne zastąpienie implementacji dla tych funkcji za pomocą SimpleMembershipProvider.

Miałem to samo pytanie dotyczące modyfikacji projektu DB, musiałem wrócić do niestandardowej klasy MembershipProvider.

Również pochodzi z Microsoft pracownika/ASP.NET programista John Galloway's blog:

Podczas SimpleMembership nie jest baza danych agnostykiem, to działa w całej rodzinie SQL Server. W dalszym ciągu obsługuje pełny SQL Server, ale działa również z SQL Azure, SQL Server CE, SQL Server Express i LocalDB. Wszystko jest zaimplementowane jako wywołania SQL, a nie wymaga procedur składowanych, widoków, agentów i powiadomień o zmianach.

Zauważ, że SimpleMembership nadal wymaga pewnego smaku SQL Server - nie będzie pracować z bazami danych MySQL, NoSQL itp Można przyjrzeć kodu w WebMatrix.WebData.dll stosując narzędzia takie jak ILSpy if Ty byś chciał wiedzieć, dlaczego są miejsca, w których wykonywane są instrukcje SQL Server specyficzne dla SQL , szczególnie podczas tworzenia i tworzenia tabel. Wygląda na to, że możesz pracować z inną bazą danych, jeśli utworzyłeś tabele osobno, ale nie wypróbowałem tego i nie było to obsługiwane w tym momencie.

1

Robię to za pomocą LLBLGen (który pracuje dla MySQL, Oracle, Firebird, DB2, i więcej): SimpleMembershipProvider in MVC4 for MySql, Oracle, and more with LLBLGen.

Możesz zrobić to samo, jak opisano w tym artykule, tworząc własną implementację ExtendedMembershipProvider z dowolną strategią DAL. Jeśli chcesz użyć Entity Framework, zakodujesz implementację dostawcy z dostawcą MySql obsługującym Entity Framework (patrz: DevArt's MySql Entity Framework Tutorial).

1

Istnieje zaskakująco niewielu dostawców i wydaje się, że nie ma żadnego dla MySQL, który jest naprawdę smutny. Łatwo byłoby przesłonić dostawcę SimpleMemberShip do pracy z MySQL, ale nie mogę znaleźć nikogo, kto przygotowałby dla niego pakiet roboczy.

Zrobiłem jednak znaleźć pakiet dla MonogDB który wygląda ok (nie testowałem go jednak) http://extmongomembership.codeplex.com/

Możemy mieć tylko nadzieję, że MySQL będzie wspierać ten w przyszłości - choć wątpię, gdyż nie ma ogłoszenia o tym.

4

Sprawdź ten krótki artykuł Fabio Costa na temat używania SimpleMembership i OAuth z mySQL i bigintem lub dowolną bazą danych i typem danych: http://fabiocosta.ca/2012/11/24/use-simplemembership-and-oauth-with-any-database-and-datatype/. To powinno rozwiązać twój problem. Powodzenia.

Zrobiłem też następujące zmiany do mojego kodu:

  • Dodano odniesienia do MySql.Data, MySql.Data.Entity i MySql.Web. Zmodyfikowana właściwość "Kopiuj lokalnie" na wartość true dla każdego odwołania.

  • Zmieniono łańcuch połączeń i dodano DbProviderFactory w pliku web.config, aby włączyć połączenia MySql.

  • Dodano konfigurację roleManager i memberShip w pliku web.config.

web.config

<connectionStrings>  
    <add name="DefaultConnection" connectionString="Data Source=localhost;Database=dbname;User ID=username;Password=password;" providerName="MySql.Data.MySqlClient" /> 
</connectionStrings> 
<system.data> 
    <DbProviderFactories> 
     <clear /> 
     <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.6.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" /> 
    </DbProviderFactories> 
</system.data> 
<system.web> 
    <roleManager enabled="true" defaultProvider="simple"> 
     <providers> 
      <clear/> 
      <add name="simple" type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData"/> 
     </providers> 
    </roleManager> 
    <membership defaultProvider="simple"> 
     <providers> 
      <clear/> 
      <add name="simple" type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData"/> 
     </providers> 
    </membership> 
</system.web> 
  • Utworzono _AppStart.cshtml root zainicjować połączenie db i autom. tworzyć tabele w db po uruchomieniu aplikacji.

_AppStart.cshtml

@{ 
    if (!WebSecurity.Initialized) 
    { 
     WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true); 
    } 
} 
  • Dodano filtr zapewniający połączenie db podczas żądań uwierzytelniania. Jest to to samo, co ręczne umieszczanie atrybutu InitializeSimpleMembership na każdym kontrolerze.

App_Start \ FilterConfig.cs

public class FilterConfig 
{ 
    public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
    { 
     filters.Add(new HandleErrorAttribute()); 
     filters.Add(new InitializeSimpleMembershipAttribute()); 
    } 
} 
+1

http://fabiocanada.ca/2012/11/24/use-simplemembership-and-oauth-with-any-database-and-datatype/ link nie działa :( –

0

Tak Wystarczy odwiedzić https://github.com/xyz37/MySqlSimpleMembershipProvider

Pobierz przykładową aplikację i modyfikować do własnych potrzeb. Działa świetnie po wyjęciu z pudełka.Kiedy uruchamiasz aplikację po raz pierwszy po kratowaniu użytkownika i odpowiednich uprawnień, jeśli pojawi się błąd, że nie można utworzyć bazy danych, odśwież przeglądarkę raz lub dwa razy, a utworzy ona bazę danych.

Powiązane problemy