我有我的身份验证控制器,成功登录后会将用户重定向到我的仪表板控制器,并填充了user.identity属性,因此我可以使用User.IsAuthenticated
和User.IsInRole("Admin")
我的问题是。
用户登录并进入仪表板页面后。如果他们已登录,如何将他们重定向回仪表板页面。
提前谢谢。
所以我
的解决方案是简单地检查用户是否已经在我的[HttpGet]
登录控制器中进行身份验证,而不是在我的[HttpPost]
登录控制器中。
[HttpGet]
public ActionResult Login()
{
if (User.Identity.IsAuthenticated)
return RedirectToAction("Index", "Dashboard");
return View();
}
[HttpPost]
public async Task<IActionResult> Login(LoginViewModel req)
{
return View(req);
}
实现身份验证。并使仪表板默认控制器。魔术会发生,开箱即用。
在创业中.cs
public void ConfigureServices(IServiceCollection services)
{
...
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie("user_by_cookie", options =>
{
options.LoginPath = "/Login/Index/";
})
...
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
...
app.UseAuthentication();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Dashboard}/{action=Index}/{id?}");
});
...
}
登录控制器
[Authorize(AuthenticationSchemes = "user_by_cookie")]
public class LoginController : Controller
{
[HttpGet]
[AllowAnonymous]
public IActionResult Index()
{
return View();
}
[HttpPost]
[AllowAnonymous]
public IActionResult Index()
{
...
//authenticate();
...
return View();
}
[HttpGet]
public IActionResult Logout()
{
..
// logout(); ->
..
return RedirectToAction("Index");
}
}
在仪表板控制器中
[Authorize(AuthenticationSchemes = "user_by_cookie")]
public class DashboardController : Controller
{
[HttpGet]
public IActionResult Index()
{
return View();
}
}