登录后ASP.NET Core 2.2 MVC问题重定向

时间:2019-02-10 22:28:34

标签: asp.net asp.net-mvc asp.net-core asp.net-authentication

我最近在尝试登录正在使用的Web应用程序时遇到问题,我没有修改Startup.cs文件,它在上次使用时曾经可以正常工作,但是现在尝试登录后,虽然登录成功,但仍将我重定向回“登录”页面

var result = await _signInManager.PasswordSignInAsync(user.UserName, 
    model.Password, model.RememberMe, lockoutOnFailure: true);
if (result.Succeeded)
{
    // return LocalRedirect(returnUrl);
    return RedirectToAction(nameof(HomeController.Index), "Home");
}

它击中了RetirectToAction,但是我被发送回登录页面,并且我在网络控制台中看到两个状态,分别是200和302

稍作更新,尝试了不同的操作后,signInManager似乎根本没有登录

Startup.cs

  public void ConfigureServices(IServiceCollection services)
    {
        services.Configure<CookiePolicyOptions>(options =>
        {
            // This lambda determines whether user consent for non-essential cookies is needed for a given request.
            options.CheckConsentNeeded = context => true;
            options.MinimumSameSitePolicy = SameSiteMode.None;
        });

        services.AddDbContext<AORContext>(options =>
            options.UseSqlServer(
                Configuration.GetConnectionString("DefaultConnection")));


        services.AddIdentity<IdentityUser, IdentityRole>()
            .AddDefaultUI(UIFramework.Bootstrap4)
            .AddEntityFrameworkStores<AORContext>();

        services.Configure<IdentityOptions>(options =>
        {
            // Default User settings.
            options.User.AllowedUserNameCharacters =
                    "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+";
            options.User.RequireUniqueEmail = true;

        });

        services.Configure<IdentityOptions>(options =>
        {
            // Default Password settings.
            options.Password.RequireDigit = true;
            options.Password.RequireLowercase = true;
            options.Password.RequireNonAlphanumeric = false;
            options.Password.RequireUppercase = true;
            options.Password.RequiredLength = 6;
            options.Password.RequiredUniqueChars = 0;
        });

        services.ConfigureApplicationCookie(options =>
        {
            options.AccessDeniedPath = "/Account/AccessDenied";
            //options.Cookie.Name = "YourAppCookieName";
            options.Cookie.HttpOnly = true;
            options.ExpireTimeSpan = TimeSpan.FromMinutes(60);
            options.LoginPath = "/Account/Login";
            options.LogoutPath = "/Account/Logout";
            // ReturnUrlParameter requires 
            //using Microsoft.AspNetCore.Authentication.Cookies;
            //options.ReturnUrlParameter = CookieAuthenticationDefaults.ReturnUrlParameter;
            //options.SlidingExpiration = true;
        });

        services.AddMvc(config =>
        {
            // using Microsoft.AspNetCore.Mvc.Authorization;
            // using Microsoft.AspNetCore.Authorization;
            var policy = new AuthorizationPolicyBuilder()
                             .RequireAuthenticatedUser()
                             .Build();
            config.Filters.Add(new AuthorizeFilter(policy));
        }).SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
            // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseCookiePolicy();

        app.UseAuthentication();

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });
    }

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,这比任何东西都更像是一种hack,但我通过将操作重定向到带有标志的自身来使其工作。如果设置了该标志,则重定向到实际的目标页面:

// GET: LoginWithToken
[AllowAnonymous]
[HttpGet("LoginWithToken")]
public async Task<ActionResult> LoginWithToken(string token = null, bool tokenLoginSuccess = false)
{
    // redirect
    if (tokenLoginSuccess)
        return RedirectToAction(nameof(Index));

    // set cookie
    await schoolLoginService.SignInWithToken(this.HttpContext, token);

    return RedirectToAction(nameof(LoginWithToken), new { tokenLoginSuccess = true });
}
相关问题