在显示有关身份验证的视图时(显示的视图取决于访问者是否是用户)。我面临很多选择。所以我需要你的帮助来告诉我如何处理这种情况:
- 使用 2 个视图(一个用于用户,另一个用于访问者),或者只使用一个视图。
- 使用 2 个动作(一个带有授权过滤器,另一个没有),或者只使用一个动作。
为什么你建议的选择更好?
在显示有关身份验证的视图时(显示的视图取决于访问者是否是用户)。我面临很多选择。所以我需要你的帮助来告诉我如何处理这种情况:
为什么你建议的选择更好?
您不必不使用Authorize
属性。它的主要功能是User
在上下文中设置,然后默认情况下,它还会检查他们是否已登录。但是,最后一部分也可以通过使用AllowAnonymous
属性来覆盖:
[Authorize]
[AllowAnonymous]
public ActionResult SomeView()
{
...
}
因此,现在您的视图将可以User
使用,并且您可以使用基于身份验证状态的视图动态呈现视图的不同部分:
@if (User.IsAuthenticated)
{
<p>Logged in</p>
}
else
{
<p>Anonymous</p>
}
编辑(澄清)
该Authorize
属性实际上为您做了两件不同的事情。首先,它设置了识别用户的所有机制:读取 cookie 或其他任何东西,检查身份验证状态,提取用户信息,如果他们通过身份验证,等等。其次,它验证用户实际上已登录。使用AllowAnonymous
跳过第二部分并允许任何人,无论是否登录,都可以访问该视图,但是这是关键,您仍然需要第一部分来了解您是否有经过身份验证的用户等信息。
因此,简单地说,同时使用Authorize
和AllowAnonymous
属性本质上意味着“查看用户是否已登录,但不需要它访问此视图”。这允许匿名用户仍然可以访问该页面,但使您仍然可以向实际登录的用户提供独特或不同的内容。