Asp.net mvc 显示有关身份验证的视图?
在显示有关身份验证的视图时(显示的视图取决于访问者是否为用户)。我面临许多选择。因此,我需要你的帮助来告诉我如何应对这种情况:Asp.net mvc 显示有关身份验证的视图?,asp.net-mvc,authentication,Asp.net Mvc,Authentication,在显示有关身份验证的视图时(显示的视图取决于访问者是否为用户)。我面临许多选择。因此,我需要你的帮助来告诉我如何应对这种情况: 使用两个视图(一个供用户使用,另一个供访问者使用),或仅使用一个视图 使用两个操作(一个带授权筛选器,另一个不带),或仅使用一个操作 为什么您建议的选择更好?您不必不使用Authorize属性。它的主要功能是在上下文中设置用户,然后默认情况下,它还检查用户是否登录。但是,也可以使用AllowAnonymous属性覆盖最后一部分: [Authorize] [Allow
- 使用两个视图(一个供用户使用,另一个供访问者使用),或仅使用一个视图
- 使用两个操作(一个带授权筛选器,另一个不带),或仅使用一个操作
为什么您建议的选择更好?您不必不使用
Authorize
属性。它的主要功能是在上下文中设置用户
,然后默认情况下,它还检查用户是否登录。但是,也可以使用AllowAnonymous
属性覆盖最后一部分:
[Authorize]
[AllowAnonymous]
public ActionResult SomeView()
{
...
}
因此,现在您的视图将有一个用户
可供使用,并且您可以根据身份验证状态动态显示视图的不同部分:
@if (User.IsAuthenticated)
{
<p>Logged in</p>
}
else
{
<p>Anonymous</p>
}
@if(User.IsAuthenticated)
{
登录
}
其他的
{
匿名的
}
编辑(澄清)
Authorize
属性实际上为您做了两件截然不同的事情。首先,它设置了识别用户的所有机制:读取cookie或其他信息,检查身份验证状态,提取用户信息,如果用户已通过身份验证,等等。其次,它验证用户是否已实际登录。使用AllowAnonymous
跳过第二部分,允许任何人(无论是否登录)访问视图,但这是关键,您仍然需要第一部分来了解是否有经过身份验证的用户
因此,简单地说,同时使用
Authorize
和AllowAnonymous
属性意味着“查看用户是否登录,但不要求其访问此视图”。这允许匿名用户仍然访问该页面,但允许您仍然向实际登录的用户提供唯一或不同的内容。谢谢,但是为什么要使用Authorize然后用Allowanonymous覆盖它,我的意思是,如果您不使用Authorize
,为什么我们不忽略这两个属性,那么用户将不会在登录用户(如果存在)的上下文中填充。我没有理解,你能再解释一次吗?从哪里学来的,为什么我读的电子书没有告诉所有关于[Authorize]的内容,但这里有一些错误,我使用的是mvc 4,即使我没有添加任何属性,它也适用于我,关于用户的另一件事是,它是这样工作的:User.Identity.IsAuthenticated