我有一个Identity 3.0项目。我已经设置了一个动态菜单,该菜单也有效,并根据您所处的角色显示不同的菜单列表。
我希望授权用户拥有不同的主页。如果您是UnAuthorized,您应该看到" / Home / Index"按照正常情况。
如果您是授权用户(以用户身份登录并且记得您...),您应始终被定向到授权用户的其他主页...说&#34; /计划/索引&#34;。< / p>
我已经设置了AuthorizeFilter
services.AddMvc(setup =>
{
setup.Filters.Add(new AuthorizeFilter(defaultPolicy));
});
因此,除非您获得授权,否则如果您尝试访问任何控制器而没有以下内容,您将被发送到登录页面:
[AllowAnonymous]
一开始......例如HomeController在开始就有这个......
我在Stackoverflow上找到this并在StartUp类中尝试了它,但它不起作用。
services.Configure<CookieAuthenticationOptions>(options =>
{
options.LoginPath = new PathString("/Scheduler/Index");
});
我如何拥有两个不同的主页,具体取决于用户是否已登录?
答案 0 :(得分:3)
你有(至少)两种方式:
1)从“索引”操作中返回不同的视图名称(取决于用户状态):
[AllowAnonymous]
public IActionResult Index()
{
// code for both (anonymous and authorized) users
...
var shouldShowOtherHomePage = ... // check anything you want, even specific roles
return View(shouldShowOtherHomePage ? "AuthorizedIndex" ? "Index", myModel);
}
如果您的Index
方法没有“重”逻辑,对于匿名/授权用户不同,并且您在一个方法中不会有两个“分支”代码,那么这个很好。
2)将授权用户从Index
重定向到其他操作:
[AllowAnonymous]
public IActionResult Index()
{
var shouldShowOtherHomePage = ...
if (shouldShowOtherHomePage)
{
return RedirectToAction("AuthorizedIndex", "OtherController");
}
// code for anonymous users
....
}
如果您不想在一个方法中混合两个逻辑流,或者您的操作位于不同的控制器中,请使用此选项。