2013-03-27 13 views
16

Ho provato per 2 giorni a ottenere qualcosa di funzionante, ma finora è stato inutile. Quello di cui ho bisogno è gestire gli utenti e i loro ruoli, nient'altro.ASP.net MVC 4 Amministrazione utenti e ruoli (la proprietà "Membership.Provider" deve essere un'istanza di "ExtendedMembershipProvider".)

Quello che ho provato è capire come farlo in MVC ma non riesco a trovare un tutorial dettagliato su come farlo, sia su Internet o in qualsiasi libro MVC 4.

ho iniziato attivando il database aspnet con l'utilità Aspnet_regsql, questo crea queste tabelle:

Tables added by aspnet_regsql

Questo è tutto quello che ho trovato sul tutorial, non mostra come interagire con queste tabelle (che presumo sia con il provider di appartenenze predefinito), finora ho trovato che ci sono 3 opzioni principali per fare questo:

  • provider di appartenenze predefinito (da cui non so nulla)
  • Provider universali
  • SimpleMembership

ho trovato questo tutorial:

http://www.asp.net/mvc/tutorials/mvc-music-store/mvc-music-store-part-7

Qui chiedono di creare un nuovo progetto di applicazione MVC 4 con modello di applicazione internet e copiare tutti i file relativi alla controllo dell'account.

l'ho fatto per il mio progetto, ma non appena provo ad entrare in ottengo:

chiamare questo metodo, la proprietà "Membership.Provider" deve essere un'istanza di "ExtendedMembershipProvider".

che secondo il forum: http://social.msdn.microsoft.com/Forums/en-US/windowsazuredevelopment/thread/d352bb1b-577c-42b7-8872-5ed59cd65f32/

è a causa di come ho definito il profilo, associative e roleManager fornitori sul mio file web.config, che è definito come segue:

<profile> 
    <providers> 
    <clear /> 
    <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="DatabaseConnection" applicationName="/" /> 
    </providers> 
</profile> 
<membership> 
    <providers> 
    <clear /> 
    <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="DatabaseConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" /> 
    </providers> 
</membership> 
<roleManager enabled="true"> 
    <providers> 
    <clear /> 
    <add connectionStringName="DatabaseConnection" applicationName="/" name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" /> 
    <add applicationName="/" name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" /> 
    </providers> 
</roleManager> 

All I è necessario poter aggiungere nuovi utenti, assegnare loro ruoli e mostrare contenuti diversi in base al ruolo che accede alla vista.

Domanda # 1 Qual è il provider di appartenenze in uso quando creo un'applicazione MVC 4 con un modello di applicazione di Internet?

Domanda # 2

Che cosa sto facendo di sbagliato con il file web.config? Come posso definire correttamente i provider?

Domanda # 3

Quale opzione mi si addice meglio? Se conosci un buon tutorial per questo potresti collegarmi ad esso?

Qualsiasi aiuto sarà davvero apprezzato! Grazie in anticipo!

+2

Hai visto ASP.NET Simple Membership? Ecco un buon punto di partenza: http://weblogs.asp.net/jgalloway/archive/2012/08/29/simplemembership-membership-providers-universal-providers-and-the-new-asp-net-4-5 -web-forms-and-asp-net-mvc-4-templates.aspx – Floremin

+0

Ho appena notato che la mia classe di controller ha un [InitializeSimpleMembership] che afferma chiaramente che sto usando la semplice appartenenza Sul link che mi hai inviato mostrano come il web. il file config definisce i provider, li ho appena aggiunti al mio web.config e non appena effettuo il login, ottengo sempre lo stesso o chiamo questo metodo, la proprietà "Membership.Provider" deve essere un'istanza di "ExtendedMembershipProvider". Che cosa sto facendo di sbagliato? – oskar132

+1

Hai provato a iniziare "clean" con Simple Membership? Questa discussione potrebbe aiutare: http://stackoverflow.com/questions/13324544/how-to-add-asp-net-membership-provider-in-a-empty-mcv-4-project-template – Floremin

risposta

4

Il provider di appartenenza che si sta utilizzando è datato. Nuovo Universal Membership Provider utilizza nuovi nomi di tabella senza prefisso aspnet_.

1) Si prega di dare un'occhiata al link di Scott Hanselman.

2) Non è necessario profile se non lo si utilizza. La configurazione roleManager non è corretta.

FYI: Si prega di definire machineKey esplicitamente in web.config; ti farà risparmiare un sacco di mal di testa in futuro.

P.S. Sono d'accordo con te. Ho appena finito di leggere Pro ASP.NET MVC 4 by Adam Freeman; non ha menzionato il provider di appartenenza. ASP.NET MVC 4 and the Web API by Jamie Kurtz utilizza il provider di appartenenze legacy se si desidera leggere.

+0

Potrebbe specificare per favore sulla chiave della macchina? cosa serve? Grazie per la tua risposta! – oskar132

+1

Se la password è crittografata o hash, il provider di appartenenza usa 'machineKey' per generarlo. Se si sposta l'applicazione su un altro server, l'utente esistente non può più accedere se "machineKey" non è definito esplicitamente. – Win

+0

Vedo, grazie mille per le informazioni, lo terrò a mente! – oskar132

1

Domanda n. 1 Che cos'è il provider di appartenenze utilizzato quando creo un'applicazione MVC 4 con un modello di applicazione Internet?

Risposta: SimpleMembershipProvider

Domanda # 2 Che cosa sto facendo di sbagliato con il file web.config? come posso definire correttamente i provider?

Risposta: Per SimpleMembershipProvider, le modifiche al file web.config non sono necessarie. Vedi qui per informazioni dettagliate sulla configurazione/configurazione e tutorial: http://aaron-hoffman.blogspot.com/2013/02/aspnet-mvc-4-membership-users-passwords.html

1

L'appartenenza e la sicurezza erano estremamente complicate in ASP.Net ed è ancora complicata in ASP.NET MVC. Ma fortunatamente è possibile non usare affatto l'iscrizione integrata. Ho creato una semplice solutione e utilizzato in molti progetti e ora l'ho aggiunto a github, vedi http://github.com/TesserisPro/ASP.NET-SImple-Security-Provider Puoi facilmente personalizzarlo.

+0

Grazie mille, darò un'occhiata in esso, tuttavia ho visto che con il nuovo mvc 5 hanno cambiato il componente di appartenenza e sembra molto più facile da usare, l'hai visto? – oskar132

+0

Sì, ho.C'era il provider WebMatrix del provider OWIN. Se stai migrando da MVC4 a MVC5 passerai un'ora o più a occuparti di queste cose e delle loro dipendenze, perché sono ancora troppo complicate per cose semplici. Ecco perché ho creato questo. Fornisce solo utenti con funzioni di accesso e ruoli molto semplici e non dipende dalle astronavi. – Dmitry

+0

@Dmitry Tutto è salvato in 1 tabella con il tuo sampleproject. È un buon modello per le piccole applicazioni. – JoshYates1980

Problemi correlati