ASP .NET Core身份验证SignInManager

3

你好。ASP.NET Core项目没有验证功能,因此我尝试添加内置的身份验证功能。数据库中的表已经成功创建,新用户已注册。在帐户控制器的登录方法中,SignInManager返回成功的处理结果。在局部视图中,链接用于添加注入和库进行登录\注册(所有内容都是基于身份验证的默认项目实现):

@using Microsoft.AspNetCore.Identity
@inject SignInManager<ApplicationUser> SignInManager

然后在视图检查中:
SignInManager.IsSignedIn(User)

登录后,它总是为false,不管之前的状态是否成功。我在控制器中添加了什么东西,或者在Startup.csConfiguration中漏掉了什么?所有事情都按照默认的VS项目进行了实现,包括身份验证。

更新:Startup.cs中的配置:

public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext<ApplicationDbContext>(options =>
        options.UseMySql("Server=; Database=; Uid=;Pwd=;"));

        services.AddIdentity<ApplicationUser, IdentityRole>(options =>
        {
            options.Password.RequireDigit = true;
            options.Password.RequiredLength = 6;
            options.Password.RequireNonAlphanumeric = false;
            options.Password.RequireUppercase = true;
            options.Password.RequireLowercase = false;

            options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(5);
            options.Lockout.MaxFailedAccessAttempts = 5;

            options.User.RequireUniqueEmail = true;
            options.SignIn.RequireConfirmedEmail = true;
        })
            .AddEntityFrameworkStores<ApplicationDbContext>()
            .AddDefaultTokenProviders();

        // Here added my application services. 
        .......

        services.AddMvc();
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {

        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
            app.UseBrowserLink();
            app.UseDatabaseErrorPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
        }

        app.UseStaticFiles();

        app.UseAuthentication();

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

你能展示一下在Startup.cs中的auth配置吗? - uopeydel
更新 - 在startup.cs中添加配置 - K. Alex
1
我认为你忘记使用 Cookie 设置,请参阅 https://learn.microsoft.com/en-us/aspnet/core/security/authentication/identity-configuration?tabs=aspnetcore2x#cookie-settings。 - uopeydel
谢谢,uopeydel!看,它正在工作。 - K. Alex
2个回答

4
在您的ConfigureServices方法中也要配置cookie,类似下面这样:
...
// Here added my application services. 
.......
services.ConfigureApplicationCookie(options => 
{
     options.Cookie.HttpOnly = true;
     options.Cookie.Expiration = TimeSpan.FromDays(5);
     options.LoginPath = "/Account/Login";
 });

3

我遇到过同样的问题,但看了你的帖子后,我意识到我没有进行身份验证。我不需要设置我的cookies。

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    // ...

    app.UseAuthentication();

    // ...
}

我想回答这个问题,以防其他遇到同样问题的人也会遇到同样的困难。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接