使用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);
}
答案 0 :(得分:0)
您可以在主页上添加用户名标签作为标识符。如果用户是匿名用户,则标签将显示Hello匿名用户,如果用户获得身份验证,您只需显示用户名和Hello关键字,通过访问标签,您可以识别用户是否经过身份验证。
此外,我相信在验证后会生成一个令牌,也可以用于此目的,但如果您只需要通过HomePage显示来显示或识别,则可以按照上述步骤进行。
对于我的一个项目,这符合我的目的
Hello, <asp:LoginName runat="server" /> !
答案 1 :(得分:0)
在我看来,重定向在这里并不是一个糟糕的解决方案。我假设您的大多数控制器/操作都具有Authorize属性,因此当用户成功登录时,应将其重定向到所需页面。
此外,我注意到如果登录失败,您将用户重定向到主页/索引 - 为什么不将用户留在同一登录页面上并向他显示错误消息?
另一种解决方案可能是通过ajax提交表单。然后你应该修改你的登录操作,以便它返回错误(假设401 - 未经授权)如果登录失败,200 - 如果登录成功则确定(也假设您正在使用身份验证cookie,您应该在此处传递它)。然后,您将必须监视ajax完成事件并检查您获得的响应状态。如果你得到401,在你的对话窗口中显示一条错误信息,如果你得到200,意味着登录成功 - 如果你使用表格认证cookie存储它以备将来使用,只需关闭一个对话框表格。从这一点开始,所有请求都将包含此身份验证cookie,因此所有请求都将通过授权。