[英]How to return a message when a try to login to the website failed, because the user does not exist/password/username arent correct?
[英]How to return correct error message to User when log in is restricted
我是ASP.Net Web开发的新手,当登录受到限制时,我只能处理异常。 问题:我具有所有者登录和租户登录。现在,所有者可以限制租户的登录。 但是,当登录受到限制时,我想向租户显示他们的凭据正确,但是登录受到限制。
以下是我迄今为止尝试过的方法。
调节器
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult LoginSubmit(LoginMV userData)
{
if (userData != null)
{
UserMV authenticatedUser = AuthenticateTenant(userData.Username, userData.Password);
if (authenticatedUser == null)
{
ModelState.AddModelError("Invalid credentials");
}
else
{
//Do the login
}
}
return View("Login", userData);
}
来自API的用户数据
private static UserMV AuthenticateTenant(string username, string password)
{
Res response = mdlAPI.AuthenticateTenant(username, password);
try{
response.Validate(username);
}
UserMV result = new UserMV()
{
DisplayName = response.objTenant.LastName + ", " + response.objTenant.FirstName
};
return result;
}
FYI
API响应为response.ResultCode = Restricted
。
验证
public static void Validate(this Res response, string username)
{
if (response.ResultCode != Enumerations.AuthResultCode.Successful)
{
string additionalDetails = "";
if (response.ResultCode == Enumerations.AuthResultCode.Restricted)
{
additionalDetails = "Login Restricted.";
}
throw new ValidationException(additionalDetails);
}
}
因此,在上述方法additionalDetails
被置为“登录Restrcited”和ValidationException被调用。 另外,由于引发了异常,因此不会在AuthenticateTenant function
创建UserMV对象。
ValidationException
public class ValidationException : Exception
{
public ValidationException(string message) : base (message)
{ }
}
完成所有这些操作后,代码序列将返回到控制器。 由于userMV为NULL,因此显示的错误消息为“无效凭据”。 我错过了什么吗?
我在ValidationException类中正确获取了异常。 我是否需要做其他事情才能将异常显示给用户。 我是一个初学者,请原谅我的编码标准。 请指导我要向租户显示“其他详细信息”的其他操作。
查看文件:
@using (Html.BeginForm("LoginSubmit", "Security", FormMethod.Post, new { id = "simLogin" }))
{
@Html.AntiForgeryToken()
<div class="form-horizontal-width-inherit">
@Html.HiddenFor(model => model.ReturnUrl)
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.ValidationMessageFor(model => model.Username, "", new { @class = "text-danger" })
@Html.LabelFor(model => model.Username, htmlAttributes: new { @class = "control-label ignoreSpacing col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Username, new { @class = "form-control" } )
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.Password, htmlAttributes: new { @class = "control-label ignoreSpacing col-md-2" })
<div class="col-md-10">
@Html.PasswordFor(model => model.Password, new { @class = "form-control" } )
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Login" class="btn btn-default" />
</div>
</div>
</div>
}
您似乎在依靠AuthenticateTenant()
来检查您的凭据并return
验证结果。
但是,在内部,您正在调用Validate()
,而后者又引发异常。 那个例外改变了代码的控制流程。 当前,似乎唯一可以捕获到该错误的代码是您拥有的某些错误筛选器,或者已向下传播到IIS,并且正在显示通用HTTP 500。
我建议不要在AuthenticateTenant()
方法中抛出异常,而应返回null
(或者,如果您愿意更改方法签名,则返回false
)。
一旦恢复了对流程的控制,就可以依靠返回的结果正确调用ModelState.AddModelError()
并带有适当的消息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.