Webforms logowanie do aplikacji za pomocą nazwy i numeru

0

Cześć,
prawdopodobnie pytanie należy do trywialnych (dla tych co znają się na zagadnieniu).

Standardowo aplikacja webforms obsługuje logowanie za pomocą nazwy użytkownika i e-mail.
Są w tym celu przygotowane odpowiednie strony logowania, zakładania konta użytkownika itp.

Jak przerobić to na "lokalne" rozwiązanie bez e-maila gdzie użytkownik logowałby się za pomocą wpisywanego numeru i hasła?

0
  1. wyłączyć sprawdzanie czy podany ciąg jest poprawnym adresem email (o ile jest)
  2. wyłączyć akceptowanie konta dopiero po potwierdzeniu emaila (o ile jest)
    done
0

Dobry wieczór,
wracając do tematu logowania.
Przerobiłem formularz rejestracji tak, że ma trzy pola - UserName, Password i PasswordConfirmed. Po kliknięciu na przycisk "utwórz konto" wykonuje się metoda, która ma założyć konto - ale nie zakłada. Zakłada tylko jak dodaję użytkownika z fałszywym adresem email: [email protected]

Strona rejestracji użytkownika [Register.aspx]

 <%@ Page Title="Rejestracja" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Register.aspx.cs" Inherits="WebForms1.Account.Register" %>

<asp:Content runat="server" ID="BodyContent" ContentPlaceHolderID="MainContent">
    <h2><%: Title %>.</h2>
    <p class="text-danger">
        <asp:Literal runat="server" ID="ErrorMessage" />
    </p>

    <div class="form-horizontal">
        <h4>Tworzenie nowego konta pracownika</h4>
        <hr />
        <asp:ValidationSummary runat="server" CssClass="text-danger" />
        <div class="form-group">
            <asp:Label runat="server" AssociatedControlID="UserName" CssClass="col-md-2 control-label">numer pracownika</asp:Label>
            <div class="col-md-10">
                <asp:TextBox runat="server" ID="UserName" CssClass="form-control" />
                <asp:RequiredFieldValidator runat="server" ControlToValidate="UserName"
                    CssClass="text-danger" ErrorMessage="Numer pracownika jest wymagany!" />
            </div>
        </div>

        <div class="form-group">
            <asp:Label runat="server" AssociatedControlID="Password" CssClass="col-md-2 control-label">hasło:</asp:Label>
            <div class="col-md-10">
                <asp:TextBox runat="server" ID="Password" TextMode="Password" CssClass="form-control" />
                <asp:RequiredFieldValidator runat="server" ControlToValidate="Password"
                    CssClass="text-danger" ErrorMessage="Hasło jest wymagane." />
            </div>
        </div>
        <div class="form-group">
            <asp:Label runat="server" AssociatedControlID="ConfirmPassword" CssClass="col-md-2 control-label">potwierdź hasło:</asp:Label>
            <div class="col-md-10">
                <asp:TextBox runat="server" ID="ConfirmPassword" TextMode="Password" CssClass="form-control" />
                <asp:RequiredFieldValidator runat="server" ControlToValidate="ConfirmPassword"
                    CssClass="text-danger" Display="Dynamic" ErrorMessage="Potwierdzone hasło jest wymagane!" />
                <asp:CompareValidator runat="server" ControlToCompare="Password" ControlToValidate="ConfirmPassword"
                    CssClass="text-danger" Display="Dynamic" ErrorMessage="Wprowadzone hasła są różne!" />
            </div>
        </div>
        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <asp:Button runat="server" OnClick="CreateUser_Click" Text="Utwórz konto" CssClass="btn btn-primary" />
            </div>
        </div>
    </div>
</asp:Content>

Metoda wykonywana po kliknięciu na przycisk:

        protected void CreateUser_Click(object sender, EventArgs e)
        {
            var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();
            var signInManager = Context.GetOwinContext().Get<ApplicationSignInManager>();
            //var user = new ApplicationUser() { UserName = UserName.Text, Email = UserName.Text }; // to nie działa bo UserName.Text nie jest w formacie email

            //var user = new ApplicationUser() { UserName = UserName.Text, Email = "[email protected]" }; // to działa z fałszywym e-mailem [email protected]
            var user = new ApplicationUser() { UserName = UserName.Text };  //to nie działa

            IdentityResult result = manager.Create(user, Password.Text);
            if (result.Succeeded)
            {
                // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771
                //string code = manager.GenerateEmailConfirmationToken(user.Id);
                //string callbackUrl = IdentityHelper.GetUserConfirmationRedirectUrl(code, user.Id, Request);
                //manager.SendEmail(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>.");

                signInManager.SignIn( user, isPersistent: false, rememberBrowser: false);
                IdentityHelper.RedirectToReturnUrl(Request.QueryString["ReturnUrl"], Response);
            }
            else 
            {
                ErrorMessage.Text = result.Errors.FirstOrDefault();
            }
        }

Da się przerobić tak by nie wołał o e-maila przy rejestracji skoro w formularzu rejestracji inie wykorzystuję go?

0

Mały update - rejestracja działa ale tylko raz - potem pisze, że "Email '[email protected]' is already taken".
Czyli dalej nie mam rozwiązania rejestracji i logowania w WebForms za pomocą nazwy użytkownika i hasła.

0

musisz zmienić klasę ApplicationUser (a dokładnie konstruktor) tak aby nie był wymagany email

1 użytkowników online, w tym zalogowanych: 0, gości: 1