从主页登录对话框并验证主页-ASP.Net MVC Razor

本文关键字:主页 Net MVC Razor -ASP 登录 对话框 验证 | 更新日期: 2023-09-27 18:21:00

使用mvc/razor的asp.net相对较新。我有一个主页,首先它没有经过身份验证。现在我有了一个按钮,它在对话框(jqueryui)中弹出一个部分视图,要求输入用户名密码并将int传递到AccountController。在进行身份验证之前,一切都很好,现在我如何通知我的主页我们是否通过了身份验证?我正在尝试重定向方法,但不知道该怎么办。我不想再次重新加载页面,所以我想我应该避免重定向,有更好的方法吗?

主页.cshtml

dialog = $("#dialog-form").dialog({
            autoOpen: false,
            height: 260,
            width: 350,
            modal: true,
            buttons: {
                "Submit": function () {
                    $("#LogOnForm").submit();
                },
                Cancel: function () {
                    $(this).dialog("close");
                }
            }
        });

。.

<div id="dialog-form" title="Login to your account">
    @RenderPage("../Account/Login.cshtml")
</div>

。.

$("#login").button().on("click", function () {
            dialog.dialog("open");
        });

controller.cshtml

        [HttpPost]
        [AllowAnonymous]
        [ValidateAntiForgeryToken]
        public ActionResult Login(LoginModel model, string returnUrl)
        {
            if (ModelState.IsValid && MySqlWebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))
            {
                return RedirectToLocal(returnUrl);
            }
            // If we got this far, something failed, redisplay form
            ModelState.AddModelError("", "The user name or password provided is incorrect.");
            return RedirectToAction("Index", "Home");
            //return View(model);
        }

从主页登录对话框并验证主页-ASP.Net MVC Razor

在我看来,重定向在这里不是一个糟糕的解决方案。我假设您的大多数控制器/操作上都有Authorize属性,所以当用户成功登录时,他应该被重定向到所需的页面。

我还注意到,如果登录失败,你可以将用户重定向到主页/索引-为什么不将用户留在同一登录页面上,并向他显示错误消息?

另一种解决方案可以是通过ajax提交表单。然后,你应该修改你的登录操作,这样如果登录失败,它会返回一个错误(比如401-未授权),如果登录成功,则会返回200-Ok(也假设你使用的是身份验证cookie,你应该在这里传递它)。然后,您必须监视ajax完成事件,并检查您得到的响应状态。如果你得到401,在对话框窗口中显示一条错误消息,如果你得到200,则意味着登录成功-如果你使用表单身份验证cookie存储它以备将来使用,并简单地关闭对话框表单。从这一点开始,所有请求都将包括此身份验证cookie,因此所有请求都会通过授权。

您可以在主页上添加一个用户名标签作为标识符。如果用户是匿名的,标签将显示Hello anonymous user,如果用户获得身份验证,您可以简单地显示用户名和Hello关键字,通过访问标签,您可以识别用户是否已通过身份验证。

此外,我相信在身份验证后会生成一个令牌,它也可以达到目的,但如果您只需要通过主页显示来显示或识别,您可以按照上述过程进行操作。

对于我的一个项目,这为我服务

Hello, <asp:LoginName runat="server" /> !