ASP.NET MVC授权与登录身份验证不工作

我试图在我的ASP实现cookie认证。NET MVC项目,我已经根据我的研究编写了所有的代码。

我真不知道怎么了。我怀疑我的项目的文件夹层次结构是关闭的,但它不能是它。但可以是剃刀页面不映射或创建[Authorize]属性。我不知道

cookie是正确创建后,登录,但如果我把任何URL没有cookie页面加载未经授权

我对这个项目的意图是有一个开放的主页,有一些菜单和一个隐藏的管理面板,用于数据管理。如果有一些其他的建议,如何保护管理页面,我洗耳恭听。

我的项目中没有角色。

这是我的代码。

startup。cs

public class Startup
{
    public IConfiguration Configuration { get; }
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }
    public void ConfigureServices(IServiceCollection services)
    {
        var connectionString = Configuration.GetConnectionString("DefaultConnection");
        services.AddControllersWithViews();
        services.Configure<CookiePolicyOptions>(options =>
        {
            // This lambda determines whether user consent for non-essential cookies is needed for a given request.
            options.CheckConsentNeeded = context => true;
        });
        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Latest);
        services.AddAuthentication("CookieAuth").AddCookie("CookieAuth", options =>
                {
                    options.Cookie.Name = "CookieAuth";
                    options.LoginPath = "/Secure/Login";
                    //options.ExpireTimeSpan = TimeSpan.FromHours(1);
                    
                    //options.AccessDeniedPath = "/Secure/Login";
                });
        services.AddRazorPages();
        services.AddDbContext<ApplicationContext>(options =>
        {
            options.EnableSensitiveDataLogging();
            options.UseSqlServer("Server=LAPTOP-QJIOM3MT;Database=BasePistas;Trusted_connection=True;");
        });
        services.AddScoped<IUnitOfWork, UnitOfWork>();
        services.AddScoped<IUsuarioBusiness, UsuarioBusiness>();
        services.AddScoped<IPistaBusiness, PistaBusiness>();
    }
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
            app.UseHsts();
        }
       
        app.UseHttpsRedirection();
        app.UseCookiePolicy();
        app.UseRouting();
        app.UseAuthentication();
        app.UseAuthorization();
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapRazorPages();
            endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Index}/{id?}");
            
        });
    }
}

下面是带有authorize属性的控制器:

using Microsoft.AspNetCore.Authentication;
[Authorize]
public class AprovacoesController : Controller
{
    [Authorize]
    public IActionResult Consultar()
    {
        var aprovacoes = _pistaBusiness.Filtrar();
        return View("Consulta",aprovacoes);
    }
}

我认为我的登录认证是正确的,但我将把它放在这里- LoginController:

    [AllowAnonymous]
    [HttpPost]
    public async Task<IActionResult> Login(LoginDto model)
    {
        if (ModelState.IsValid)
        {
            var usuario = this._usuarioBusiness.Autenticar(model);
            if (usuario != null)
            {
                var claims = new List<Claim>()
                {
                    new Claim(ClaimTypes.NameIdentifier, usuario.IdUsuario.ToString()),
                    new Claim(ClaimTypes.Name, usuario.Nome),
                    new Claim(ClaimTypes.GivenName, usuario.Login)
                };
                var identity = new ClaimsIdentity(claims, "CookieAuth");
                var principal = new ClaimsPrincipal(identity);
                
                await HttpContext.SignInAsync("CookieAuth", principal);
                return RedirectToAction("Index", "Home");
            }
            else
            {
                model = new LoginDto();
                TempData["ErroAutenticacao"] = "Usuário ou senha inválido";
                return View(model);
            }
        }
        return View(model);
    }
    public async Task<IActionResult> Logout()
    {
        await HttpContext.SignOutAsync("CookieAuth");
        return RedirectToAction("Login", "Secure");
    }

下面是文件夹层次结构

我已经找到解决办法了。

一切都是对的!

授权不工作的原因是,我正在调试IIS express,而不是与我的项目webapp。

我还在学习ASP。NET和Visual Studio Community平台,这些细节真的很重要。

如果有人想使用这个Auth模型,它可以正常工作。

阅读全文

▼ 版权说明

相关文章也很精彩
推荐内容
更多标签
相关热门
全站排行
随便看看

错说 cuoshuo.com —— 程序员的报错记录

部分内容根据CC版权协议转载;网站内容仅供参考,生产环境使用务必查阅官方文档

辽ICP备19011660号-5

×

扫码关注公众号:职场神器
发送: 1
获取永久解锁本站全部文章的验证码