为了账号安全,请及时绑定邮箱和手机立即绑定

在身份验证 ASP.CORE 期间重定向到多个页面

在身份验证 ASP.CORE 期间重定向到多个页面

C#
慕姐8265434 2022-06-19 16:54:35
在我的 ASP.CORE 应用程序上,我使用了用户身份验证。我接下来要做的是:当用户访问该站点时,如果他未在该站点上授权-向他显示主页但如果他之前已获得授权-向他显示另一个页面(在我的示例中为加密控制器页面)。但是如果他从主页导航到 /Encrypt ,程序应该将他重定向到登录页面(现在它是如何工作的)。在配置启动时,我尝试在用户访问该站点时重定向到另一个页面 /Encrypt(默认)如果用户之前被授权 - 所有工作(他重定向到 /Encrypt 页面)但是如果他之前没有被授权,程序将重定向他到帐户控制器上的登录页面。这就是问题所在。我注意到如果用户之前被授权(仅当之前未授权(没有身份验证 cookie)),帐户控制器不会启动,所以我无法使用帐户控制器重定向。 那么,在哪里拦截请求(或阅读它)或在哪里执行对 cookie 的授权检查?或者该怎么办?我的启动设置:public void ConfigureServices(IServiceCollection services)    {       services.AddIdentity<User, IdentityRole>()            .AddEntityFrameworkStores<ApplicationContext>();    ...public void Configure(IApplicationBuilder app, IHostingEnvironment env)    {        ...        app.UseAuthentication();        app.UseMvc(routes =>        {            routes.MapRoute(                name: "default",                template: "{controller=Encrypt}/{action=Index}");        });    }我的帐户控制器如下所示:public class AccountController : Controller{    private readonly UserManager<User> _userManager;    private readonly SignInManager<User> _signInManager;    public AccountController(UserManager<User> userManager, SignInManager<User> signInManager)    {        _userManager = userManager;        _signInManager = signInManager;    }    [HttpGet]    public IActionResult Login(string returnUrl = null)    {        ViewData["UserName"] = this.GetUserName();        return View(new LoginViewModel { ReturnUrl = returnUrl });    }
查看完整描述

2 回答

?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

将此代码添加到您的启动以处理访问请求:

 services.ConfigureApplicationCookie(options =>
            {
                options.AccessDeniedPath = "/Account/Access-Denied";
                options.LoginPath = "/Account/Login";
                options.LogoutPath = "/Account/Signout";
                options.SlidingExpiration = true;
            });

具体来说.AccessDeniedPath,应该通过将其附加到 Encrypt 视图来缓解您的问题...


查看完整回答
反对 回复 2022-06-19
?
jeck猫

TA贡献1909条经验 获得超7个赞

我找到了部分解决方案。


像这样进行配置:


    public void Configure(IApplicationBuilder app, IHostingEnvironment env)

    {

        ...

        app.UseMvc(routes =>

        {

            routes.MapRoute(

                name: "default",

                template: "{controller=Home}/{action=Index}");

        });

    }

和这样的家庭控制器:


public IActionResult Index()

        {

            if (User.Identity.IsAuthenticated & !HttpContext.Session.Keys.Contains("Key"))

            {

                HttpContext.Session.SetInt32("Key", 1);

                return RedirectToAction("Index", "Encrypt");

            }

            else 

                return View();

        }

但它在会话期间仅工作 1 次,因此第二次工作需要通过关闭浏览器再次启动会话。


所以还是不好。


如果我总是在获得授权的情况下从主页重定向 - 他将永远不会看到主页。太不好了。


查看完整回答
反对 回复 2022-06-19
  • 2 回答
  • 0 关注
  • 103 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号