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

时间:2014-09-07 11:19:37

标签: c# asp.net asp.net-mvc asp.net-mvc-4 razor

使用mvc / razor对asp .net相对较新。我有一个主页,开始时未经过身份验证。现在我有一个按钮,在对话框(jqueryui)中弹出局部视图并询问用户名密码并将int传递给AccountController。一切都很好,直到认证发生,现在如何通知我的主页我们是否经过身份验证?我正在尝试重定向方法,但没有从那里开始。我不想再次重新加载页面,所以我猜我应该避免重定向,有更好的方法吗?

Home.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);
        }

2 个答案:

答案 0 :(得分:0)

您可以在主页上添加用户名标签作为标识符。如果用户是匿名用户,则标签将显示Hello匿名用户,如果用户获得身份验证,您只需显示用户名和Hello关键字,通过访问标签,您可以识别用户是否经过身份验证。

此外,我相信在验证后会生成一个令牌,也可以用于此目的,但如果您只需要通过HomePage显示来显示或识别,则可以按照上述步骤进行。

对于我的一个项目,这符合我的目的

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

答案 1 :(得分:0)

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

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

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