У меня есть страница входа, где пользователь вводит свой адрес электронной почты и пароль, но я хочу отображать предупреждение или текст, как (вы ввели неверный пароль), когда они вводят неправильный пароль. я уже проверяю, что Checkpass не является пустым делом, а в остальном я не знаю, что мне делать, если честно. Может кто-нибудь помочь мне или указать мне правильное направление!

Заранее спасибо:)

Контроллер:

    [HttpPost]
    public JsonResult Login(string Mail, string pass)
    {

        var hashedPass = PasswordSecurity.PasswordStorage.CreateHash(pass);
        using (DbNameSpace db = new DbNameSpace())
        {
            var query = from cbr in db.Contact_Business_Relation
                        join c in db.Contact on cbr.Contact_No_ equals c.Company_No_

                        join sa in db.Sales_Header on cbr.No_ equals sa.Sell_to_Customer_No_
                        join px in db.PX2 on c.E_Mail equals px.Email_ID

                        where c.E_Mail == Mail.ToLower()
                        select new
                        {
                            Mail = c.E_Mail,
                            pass = px.PS,

                        };

            var user = query.FirstOrDefault();
            var CheckPass = PasswordSecurity.PasswordStorage.VerifyPassword(pass, user.pass);

            if (user != null && CheckPass) //Checkpassword
            {

                Session["Email"] = user.Mail.ToString();

            }

     else {

                // ??
         }

            return Json(user, JsonRequestBehavior.AllowGet);
        }


    }

JavaScript:

<script>

    $(document).ready(function () {

        $("#login").click(function (e) {

            var email = $("input[name=Mail]").val();
            var password = $("input[name=pass]").val();
            e.preventDefault();


            $.ajax({

                type: "POST",
                dataType: "json",
                url: '@Url.Action("Login", "Account")',
                data: { Mail: email, pass: password },
                success: function (status) {


                    if (status) {

                        window.location.href = "/Account/Index";

                    }


                }

            });

        });
    });

</script>

Посмотреть:

        <form autocomplete="on" class="login100-form validate-form">

            <div>

                <label>E-mail</label>
                <div class="wrap-input100 validate-input" data-validate="Valid email is required: ex@abc.xyz">

                    <input class="input100" type="email" id="Email" name="Mail" placeholder="E-mail">

                </div>

                <label>Password</label>
                <div class="wrap-input100 validate-input" data-validate="Password is required">
                    <input class="input100" type="password" id="Password" name="pass" placeholder="Kodeord">

                </div>

                <div id="invalidpassword"></div>

                <div class="container-login100-form-btn">

                    <button id="login" class="login100-form-btn">
                        Log in
                    </button>

                </div>

        </form>
-1
7 seconds 20 Авг 2018 в 17:05

5 ответов

Лучший ответ

Вот как я в конечном итоге архивировать, как вернуть сообщение об ошибке неверного пароля, может быть, это поможет кому-то в день :)

Я создал enum для хранения значений для MessageType:

  public enum MessageType
    {
        Valid,
        InvalidEmail,
        InvalidUerNameAndPass,
    }

А затем я меняю свой контроллер, чтобы получить другой тип сообщения:

    public JsonResult Login(string Mail, string pass)
    {
        MessageType messageType = MessageType.InvalidEmail;

        using (DbNamesapce db = new DbNamesapce())
        {
            var query = // do Join
                        select new
                        {
                            //Select Something
                        };

            var user = query.FirstOrDefault();

            if (user == null)
            {
                return Json(new { messageType = MessageType.InvalidEmail }, JsonRequestBehavior.AllowGet);
            }

            if (user != null && CheckPass)
            {
                messageType = MessageType.Valid;
            }

            else
            {
                messageType = MessageType.InvalidUerNameAndPass;
            }

            return Json(new { messageType = messageType }, JsonRequestBehavior.AllowGet);
        }

    }

И я меняю свой скрипт на:

<script>

    $(document).ready(function () {

        $("#login").click(function (e) {
            var email = $("input[name=Mail]").val();
            var password = $("input[name=pass]").val();
            e.preventDefault();

            $.ajax({
                type: "POST",
                dataType: "json",
                url: '@Url.Action("Login", "Account")',
                data: { Mail: email, pass: password },
                success: function (response) {

                    switch ($.trim(response.messageType))
                    {
                        case '@Convert.ToInt32(YourNAmeSpace.Models.MessageType.Valid)':
                            alert("Valid");
                            break;
                        case '@Convert.ToInt32(YourNAmeSpace.Models.MessageType.InvalidEmail)':
                             alert("InvalidUerNameAndPass");
                            break;
                       case '@Convert.ToInt32(YourNAmeSpace.Models.MessageType.InvalidUerNameAndPass)':
                            alert("InvalidUerNameAndPass");
                            break;

                    }

                }

            });

        });
    });

</script>
0
7 seconds 22 Авг 2018 в 09:07

Это пример. Надеюсь помочь, мой друг.

[HttpPost]
    public JsonResult Login(string Mail, string pass)
    {
        var status = true; 
        var hashedPass = PasswordSecurity.PasswordStorage.CreateHash(pass);
        using (DbNameSpace db = new DbNameSpace())
        {
            var query = from cbr in db.Contact_Business_Relation
                        join c in db.Contact on cbr.Contact_No_ equals c.Company_No_

                        join sa in db.Sales_Header on cbr.No_ equals sa.Sell_to_Customer_No_
                        join px in db.PX2 on c.E_Mail equals px.Email_ID

                        where c.E_Mail == Mail.ToLower()
                        select new
                        {
                            Mail = c.E_Mail,
                            pass = px.PS,

                        };

            var user = query.FirstOrDefault();
            var CheckPass = PasswordSecurity.PasswordStorage.VerifyPassword(pass, user.pass);

            if (user != null && CheckPass) //Checkpassword
            {

                Session["Email"] = user.Mail.ToString();

            }

     else {
                status = false;                
         }

            return Json(status, JsonRequestBehavior.AllowGet);
        }


    }

В Javascript:

<script>

    $(document).ready(function () {

        $("#login").click(function (e) {

            var email = $("input[name=Mail]").val();
            var password = $("input[name=pass]").val();
            e.preventDefault();


            $.ajax({

                type: "POST",
                dataType: "json",
                url: '@Url.Action("Login", "Account")',
                data: { Mail: email, pass: password },
                success: function (status) {
                    if (status) {
                        window.location.href = "/Account/Index";
                    }else{
                         $('#invalidpassword').html('You have entered wrong password!');
                    }


                }

            });

        });
    });

</script>
0
Tomato32 20 Авг 2018 в 14:28

Проверьте этот учебник JQuery. Лично я бы использовал методы обратного вызова Fail и Done. Измените ваш контроллер c #, чтобы он возвращал разные коды состояния HTTP. Используйте HTTP 200, когда они передают хорошее имя пользователя и пароль. Используйте HTTP 400, когда они передают неверный пароль, это должно вызвать обратный вызов Fail () и позволить вам предупредить о сбое.

https://learn.jquery.com/ajax/jquery-ajax-methods/

// Using the core $.ajax() method
$.ajax({

    // The URL for the request
    url: "post.php",

    // The data to send (will be converted to a query string)
    data: {
        id: 123
    },

    // Whether this is a POST or GET request
    type: "GET",

    // The type of data we expect back
    dataType : "json",
})
  // Code to run if the request succeeds (is done);
  // The response is passed to the function
  .done(function( json ) {
     $( "<h1>" ).text( json.title ).appendTo( "body" );
     $( "<div class=\"content\">").html( json.html ).appendTo( "body" );
  })
  // Code to run if the request fails; the raw request and
  // status codes are passed to the function
  .fail(function( xhr, status, errorThrown )** {
    alert( "Sorry, there was a problem!" );
    console.log( "Error: " + errorThrown );
    console.log( "Status: " + status );
    console.dir( xhr );
  })
  // Code to run regardless of success or failure;
  .always(function( xhr, status ) {
    alert( "The request is complete!" );
  });
1
P. Roe 20 Авг 2018 в 14:22

Обычным делом было бы установить статус ответа 401 и опустить обычную полезную нагрузку данных, которая будет отправлена с успешным ответом. Затем клиентский код должен распознавать состояние ошибки и реагировать соответствующим образом (например, возможно, показывая предупреждение и оставаясь в форме имени / пароля); это поведение на стороне клиента будет указано в вызове $.ajax.

0
Mark Adelsberger 20 Авг 2018 в 14:18

Много вариантов,

Самый простой: в вашем действии вы также можете вернуть JSON:

return Json(new { Error = "Username & password does not match." });

Тогда в вашем обработчике успеха вы можете проверить это:

$.ajax({
    ...
    success: function (result) {
        if (result && result.error) {
            //show your error in your way
            return;
        }
        ...
    }
});

Другой метод - выбросить ошибку или вернуть Unauthorized();:

        if (user == null || !passcheck)
        {
            throw new Exception("Username & password does not match.");
            //return Unauthorized();
        }

Тогда вам понадобится обработчик ошибок $ .ajax

$.ajax({
    ...
    error: function (xhr, textStatus, err) {
        //handle error from 3 parameters.
        debugger;
    },
    ...
});
0
Dongdong 20 Авг 2018 в 14:22
51932529