Avatar billede kongen72 Nybegynder
14. august 2009 - 18:24 Der er 14 kommentarer og
1 løsning

hjælp til kode vedr. bruger oprettelse

Hej Eksperter!

Har lavet en oprettelses-form med følgende textfelter:

Username:
E-mail:
Location:
Homepage:
Password
Confirm password:

kode:

    protected void btnCreateUser_Click(object sender, EventArgs e)
    {
        MembershipCreateStatus createStatus;
        MembershipUser newUser = Membership.CreateUser(txtUsername.Text, txtEmail.Text, ddlCountry.Text, txtHomepage.Text, txtPassword.Text, true, out createStatus);
        switch (createStatus)
        {
            case MembershipCreateStatus.Success:
                lblResult.Text = "The user account was successfully created!";
                break;
            case MembershipCreateStatus.DuplicateUserName:
                lblResult.Text = "That username already exists.";
                break;
            case MembershipCreateStatus.InvalidUserName:
                lblResult.Text = "Please enter a VALID username.";
                break;
            case MembershipCreateStatus.DuplicateEmail:
                lblResult.Text = "A user with that Email address already exists.";
                break;
            case MembershipCreateStatus.InvalidEmail:
                lblResult.Text = "Please enter a VALID email address.";
                break;
            case MembershipCreateStatus.InvalidPassword:
                lblResult.Text = "The password entered is invalid. Please enter a passoword with at least 7 cahacters and one non-alphanumeric.";
                break;
            default:
                lblResult.Text = "Unknown Error: Account NOT created.";
                break;
        }
    }

Så er spørgsmålet, hvordan jeg sammensætter dette på en rigtig måde. Så det ligger smukt i min tabel (aspnet_Users). Lige nu ligger dataen hulter til bulter.

Tak på forånd- Kim.
Avatar billede weis Nybegynder
14. august 2009 - 19:38 #1
Jeg kan se at du vælger at gemme informationer om en bruger på felter der er beregnet til spørgsmål og svar i tilfælde af at man vil "recover" et password, eller har du lavet din egen create funktion?

Jeg fil foreslå dig at bruge user profil hvis du vil gemme yderlig data om en bruger.
Avatar billede kongen72 Nybegynder
14. august 2009 - 19:56 #2
tak.. jeg prøver med user profile!!

svar
Avatar billede weis Nybegynder
14. august 2009 - 20:00 #3
Du må skrive hvis det giver problemer!
Avatar billede kongen72 Nybegynder
15. august 2009 - 05:03 #4
hvad gør jeg, hvis jeg ønske ikke at have passwordQuestion og passwordAnswer felterne med i registrerings formen.
Avatar billede weis Nybegynder
15. august 2009 - 10:50 #5
så tilføjer du:

requiresQuestionAndAnswer="false"

til din mempership provider i din web.config og bruger den CreateUser method som kun skal bruge brugernavn og password (og evt. email hvis du kræver unikke emails)
Avatar billede kongen72 Nybegynder
15. august 2009 - 16:10 #6
Hvordan vil hele koden så se ud. Hvis jeg skal have brugernavn, password og e-mail. Da jeg får en fejl under switch (createStatus).
Avatar billede weis Nybegynder
15. august 2009 - 16:20 #7
Det er svært at sige når jeg ikke ved hvordan du har opsat din membership provider i web.config'en, men hvis du vil have en status på din create så vil det være i retningen af:

Membership.CreateUser(txtUsername.Text, txtPassword.Text, txtMail.Text, "", "", true, out createStatus);
Avatar billede kongen72 Nybegynder
15. august 2009 - 17:37 #8
Tak weis! jeg får fejl ved InvalidQuestion og InvalidAnswer! Hvad gør jeg galt. kan ikke udfører registreringen!


koden:

    protected void btnCreateUser_Click(object sender, EventArgs e)
    {
        MembershipCreateStatus createStatus;
        MembershipUser newUser = Membership.CreateUser(txtUsername.Text, txtPassword.Text, txtEmail.Text, "", "", true, out createStatus);
        switch (createStatus)
        {
            case MembershipCreateStatus.Success:
                lblResult.Text = "The user account was successfully created!";
                break;
            case MembershipCreateStatus.DuplicateUserName:
                lblResult.Text = "That username already exists.";
                break;
            case MembershipCreateStatus.InvalidUserName:
                lblResult.Text = "Please enter a valid username.";
                break;
            case MembershipCreateStatus.DuplicateEmail:
                lblResult.Text = "A user with that email address already exists.";
                break;
            case MembershipCreateStatus.InvalidEmail:
                lblResult.Text = "Please enter a valid email address.";
                break;
            case MembershipCreateStatus.InvalidPassword:
                lblResult.Text = "The password entered is invalid. please enter a passoword with at least 7 cahacters and one non-alphanumeric.";
                break;
            case MembershipCreateStatus.InvalidQuestion:
                lblResult.Text = "question";
                break;
            case MembershipCreateStatus.InvalidAnswer:
                lblResult.Text = "answer";
                break;
            default:
                lblResult.Text = "unknown error: account not created.";
                break;
        }
    }

web.config:

        <membership defaultProvider="SqlMembershipProvider">
            <providers>
                <clear />
                <add name="SqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ConnectionString" enablePasswordRetrieval="false" enablePasswordReset="false" requiresQuestionAndAnswer="false" applicationName="/" requiresUniqueEmail="true" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="8" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" passwordStrengthRegularExpression="" />
            </providers>
        </membership>
Avatar billede weis Nybegynder
15. august 2009 - 17:52 #9
Du kan prøve det her, jeg har ikke testet det, men udfra alm. tankegang burde det virke!

try
        {
            MembershipUser newUser = Membership.CreateUser(txtUsername.Text, txtPassword.Text, txtEmail.Text);
        }
        catch (MembershipCreateUserException ex)
        {
            switch (ex.StatusCode)
            {
                case MembershipCreateStatus.Success:
                    lblResult.Text = "The user account was successfully created!";
                    break;
                case MembershipCreateStatus.DuplicateUserName:
                    lblResult.Text = "That username already exists.";
                    break;
                case MembershipCreateStatus.InvalidUserName:
                    lblResult.Text = "Please enter a valid username.";
                    break;
                case MembershipCreateStatus.DuplicateEmail:
                    lblResult.Text = "A user with that email address already exists.";
                    break;
                case MembershipCreateStatus.InvalidEmail:
                    lblResult.Text = "Please enter a valid email address.";
                    break;
                case MembershipCreateStatus.InvalidPassword:
                    lblResult.Text = "The password entered is invalid. please enter a passoword with at least 7 cahacters and one non-alphanumeric.";
                    break;
                case MembershipCreateStatus.InvalidQuestion:
                    lblResult.Text = "question";
                    break;
                case MembershipCreateStatus.InvalidAnswer:
                    lblResult.Text = "answer";
                    break;
                default:
                    lblResult.Text = "unknown error: account not created.";
                    break;
            }
        }
Avatar billede windcape Praktikant
15. august 2009 - 18:01 #10
Ud fra alm. tankegang virker det ikke særlig logisk at der bliver kastet en exception på et success kald...

Men i kan finde et fint eksempel på MSDN istedet for at rode med noget eget kode.

http://msdn.microsoft.com/en-us/library/d8t4h2es.aspx

Derudover er den konstante repetition af lblResult.Text = ... dårlig kode, og burde omskrives til en funktion der retunere en returnbesked istedet.
Avatar billede weis Nybegynder
15. august 2009 - 18:10 #11
Nej ikke hvis brugeren blev oprettet korrekt, men nu kender jeg ikke M$ validering af input i deres CreateUser funktion med 7 parametere. Hvis de mener at et tomt spørgsmål eller svar er forkert så er det naturligt at komme med en exception på det!

Og ja der er behov for lidt refactoring af koden, men vil helst ikke forvirrer mere i mine svar end hvad godt er, så hellere sørge for at det kommer til at virke, og så når man får styr på det der foregår kan man begynde at optimere, men det handler det her spørgsmål jo ikke om!
Avatar billede kongen72 Nybegynder
16. august 2009 - 16:07 #12
Tak weis, den viser desværre ikke "The user account was successfully created!". Når man er færdig med udfyldningen og klikker på opret knappen.

-og hvad er egentlig den bedste/rigtige måde, at lave en ekstra trin side? hvor man eventuelt kunne udfylde personlige oplysninger!

tak på forhånd. :-)
Avatar billede weis Nybegynder
16. august 2009 - 16:15 #13
Den viser ikke den besked fordi den ikke smider en exception når brugeren er korrekt oprettet, og derfor kommer den ikke ind i catch.

Til at lave flere steps så kan ud bruge <asp:wizard> controlen, den har jeg dog ikke arbejdet med, men der findes helt sikkert en masse tutorials på nettet om den!
Avatar billede kongen72 Nybegynder
16. august 2009 - 16:36 #14
hvad kan jeg gøre for, at få teksten frem igen?
Avatar billede weis Nybegynder
16. august 2009 - 16:44 #15
du kan tilføje linjen

lblResult.Text = "The user account was successfully created!";

lige efter du har kaldt create funktionen!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester