asp.net MVC Password validation

Tags:    asp.net mvc

Hejsa

Jeg er ved at lave login og oprette et system hvor man skal kunne oprette sig som bruger.
Nu er mit "problem" så med oprettelse af email og password.
Skal jeg i mit objekt lave password, og password validation?
Og så have et andet objekt der ikke har validation når de bare skal logge ind igen? Virker lidt tosset vil jeg sige.

Hvad er best practice i forhold til det?



5 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 12 karma
Sorter efter stemmer Sorter efter dato
Prøvede lige at oprette et nyt MVC4 projekt, for at se hvad Microsoft gør. Det må jo anses for at være bedst practice.

Hurtigt forklaret, så har de to modeller. En til registrering og en til login:

Fold kodeboks ind/udCSharp kode 


Giver dig ret i, at det kan virke ulogisk, men det er jo egentlig meget logisk, da det er tvivlsom at det er de samme felter der skal bruges når man registrerer sig og når man logger ind.

Du kan dog også vælge at disable validering for den enkelte action:

Fold kodeboks ind/udCSharp kode 


Det disabler så vidt jeg ved ikke clientside validering. Det kan du gøre i dit View med:

Fold kodeboks ind/udCSharp kode 


Håber det hjalp dig lidt :)



Indlæg senest redigeret d. 30.04.2013 08:21 af Bruger #16372
@Nicky
Tak! Se sådan nogle svar kan vi kun få flere af!

Men ja synes det er lidt spildt arbejde at have hver sin model, men måske jeg laver noget nedarvning i stedet bare for at lave det pænt og på en måde jeg rent faktisk synes kan være i orden uden at have to identiske (læs: meget meget ens) modeller.

Det med jeg kan disable min validering.
Mener du jeg ville kunne bruge samme model og så disable validering når den bruges i det ene scenarie?



Velbekomme - der var endelig noget jeg vidste bare lidt om :P

Tja, ved ikke om jeg vil kalde det for spild. Oftest så har man jo en UserModel der indeholder mere end blot brugernavn og adgangskode. Typisk vil man have også have personens navn, kontrol af kode og evt. e-mail. I det scenarie, hvor man typisk vil have regler for validering synes jeg ikke det er spild. Tvært imod giver det god mening, da man opbygger sine views udfra modeller.

Det er også nemmere at vedligeholde ved at holde det adskilt. Ellers kræver det en indafgående viden omkring at man vælger at basere et view på en model der ikke bruges fuldt ud, og at man ignorer de opstillede regler.

Men ja, du burde kunne omgå det ved at disable validering i dit scenarie.

Arv i MVC4, er lidt tricky.

Du skal override default modelbinder, til at tage højde for at der er flere elementer der kan tage have samme basetype. Det kan du bl.a. gøre ved at have et hiddenfield, der fortæller hvad type det er (evt typeof(Model).FullName). Og så modelbinderen læse den værdi og initialisere et objekt af den type.

Personligt ville jeg løse det hele ved at have de to forskellige modeller. En UserModel og en LoginModel.



Jeg synes det er en dårlig måde fordi du ønsker samme funktionalitet på to klasser, og nogle afvigelser. Hvis du laver samme funktionalitet og implementering to steder er det redundant kode, med chance for du glemmer at opdatere når du vil rette noget til.

Jeg har tænkt på at lave følgende:
Fold kodeboks ind/udCSharp kode 


Så kan jeg bruge RegisterModel og LoginModel.
Jeg er ikke helt sikker på jeg forstår problematikken i at have to klasser der begge arver fra en base-class? Den bør jo stadig se det som den endelige klasse.





Jeg synes det er en dårlig måde fordi du ønsker samme funktionalitet på to klasser, og nogle afvigelser. Hvis du laver samme funktionalitet og implementering to steder er det redundant kode, med chance for du glemmer at opdatere når du vil rette noget til.


Det kan der være noget om, men det er ikke så tit at man ændrer i at man skal angive brugernavn og adgangskode for at logge på :)

Hvad hvis man gerne vil giver brugerne mulighed for at huske sit login?

Eller ikke vil have validering på login siden? F.eks. har jeg ikke noget i mod, at der bliver kontrolleret clientside at både brugernavn og adgangskode er udfyldt, men jeg vil aldrig fortælle at der skal være mindst 6 tegn i password ved login.

Så kan jeg bruge RegisterModel og LoginModel.
Jeg er ikke helt sikker på jeg forstår problematikken i at have to klasser der begge arver fra en base-class? Den bør jo stadig se det som den endelige klasse.


I forbindelse med min hovedopgave havde jeg 3-4 forskellige klasser der alle arvede fra en baseclass. Min controller vidste at, den skulle tage i mod nogle elementer der alle samme var nedarvet fra den klasse, men den kunne ikke selv finde ud af at fortolke, hvilken type de enkelte elementer bestod af. Også selvom der (tildels) var en væsentlig forskel på hvilke properties hver klasse bestod af. Derfor var det nødvendigt at override default modelbinder, og tilføje det hidden field med navnet på typen :)




t