我应该先检查身份验证还是 ModelState.IsValid
Should I check authentication first or ModelState.IsValid
我有一个 .NET MVC5 网站,用户使用 Microsoft Identity 登录。我有多个表单帖子用于在整个网站上添加和编辑项目。我想知道我应该按照哪个顺序执行验证:-
- ModelState.IsValid 然后 User.Identity.IsAuthenticated
- User.Identity.IsAuthenticated 然后 ModelState.IsValid
我目前有以下有效的代码,但它似乎是 'the chicken and egg' 的情况:-
var user = UserAccountFunctions.GetUser(User);
if (user != null)
{
ClientProfile profile = ClientProfile.GetUser(user.Id, db);
if (profile != null)
{
if (ModelState.IsValid)
{
// Do logic here
}
}
}
我是否应该先交换此代码以检查模型,然后再检查身份验证,以便:-
if (ModelState.IsValid)
{
var user = UserAccountFunctions.GetUser(User);
if (user != null)
{
ClientProfile profile = ClientProfile.GetUser(user.Id, db);
if (profile != null)
{
// Do logic here...
}
}
}
或者这里根本没有区别?我在整个站点中多次重复此代码,因此寻找哪个是更好的选择?我目前使用的是第一个,因为我觉得你甚至不应该尝试检查模型,除非它们经过身份验证?
这里有什么建议吗?
谢谢!
以下是更新用户电子邮件的示例:
[AcceptVerbs(HttpVerbs.Post)]
[Authorize]
[ValidateAntiForgeryToken()]
public ActionResult emailupdate(UserEmailEditModel editmodel_post)
{
if (!ModelState.IsValid)
{
// redirect to email view and show errors
}
// check if posted id is the same as stored in session
if (User.Identity.GetUserId() != editmodel_post.user_id.ToString())
{
// redirect to email view and show errors
}
}
所以
- 使用授权属性
- 使用ValidateAntiForgeryToken属性
- 检查ModelState
- 检查会话或数据库
我有一个 .NET MVC5 网站,用户使用 Microsoft Identity 登录。我有多个表单帖子用于在整个网站上添加和编辑项目。我想知道我应该按照哪个顺序执行验证:-
- ModelState.IsValid 然后 User.Identity.IsAuthenticated
- User.Identity.IsAuthenticated 然后 ModelState.IsValid
我目前有以下有效的代码,但它似乎是 'the chicken and egg' 的情况:-
var user = UserAccountFunctions.GetUser(User);
if (user != null)
{
ClientProfile profile = ClientProfile.GetUser(user.Id, db);
if (profile != null)
{
if (ModelState.IsValid)
{
// Do logic here
}
}
}
我是否应该先交换此代码以检查模型,然后再检查身份验证,以便:-
if (ModelState.IsValid)
{
var user = UserAccountFunctions.GetUser(User);
if (user != null)
{
ClientProfile profile = ClientProfile.GetUser(user.Id, db);
if (profile != null)
{
// Do logic here...
}
}
}
或者这里根本没有区别?我在整个站点中多次重复此代码,因此寻找哪个是更好的选择?我目前使用的是第一个,因为我觉得你甚至不应该尝试检查模型,除非它们经过身份验证?
这里有什么建议吗?
谢谢!
以下是更新用户电子邮件的示例:
[AcceptVerbs(HttpVerbs.Post)]
[Authorize]
[ValidateAntiForgeryToken()]
public ActionResult emailupdate(UserEmailEditModel editmodel_post)
{
if (!ModelState.IsValid)
{
// redirect to email view and show errors
}
// check if posted id is the same as stored in session
if (User.Identity.GetUserId() != editmodel_post.user_id.ToString())
{
// redirect to email view and show errors
}
}
所以
- 使用授权属性
- 使用ValidateAntiForgeryToken属性
- 检查ModelState
- 检查会话或数据库