IsAuthenticated设置cookie时保持错误

时间:2017-07-27 22:27:00

标签: c# asp.net-core asp.net-identity

我正在使用asp.net身份核心。我没有一切正常工作,因为我可以通过我的注册页面创建我的用户,它很好地出现在我的表格中。但是,我遇到的问题是登录。

我包含了我的startup.cs主要方法,看看当我检查isAuthenticated属性时,是否有人知道我错过了什么,它总是返回false。

 // This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
            // Add framework services.
            services.AddMvc();
            services.AddDbContext<IdentityDbContext>(options =>
            options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"),b=>b.MigrationsAssembly("solitudeeccore")));
            services.AddIdentity<IdentityUser, IdentityRole>()
       .AddEntityFrameworkStores<IdentityDbContext>()
       .AddDefaultTokenProviders();
            services.AddTransient<IMessageService, FileMessageService>();
            services.AddAuthentication(
           options => options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme);

}

我已经将它放在启动cs中的Configure方法的末尾。

app.UseCookieAuthentication(new CookieAuthenticationOptions()
{
            AuthenticationScheme = "CookieAuthentication",
            LoginPath = new PathString("/Account/Login"),
            AccessDeniedPath = new PathString("/Account/Forbidden/"),
            AutomaticAuthenticate = true,

            AutomaticChallenge = true
        });

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

        app.UseIdentity();
}

我的帐户控制器,这就是我如何开始变量。

    private readonly UserManager<IdentityUser> _userManager;
    private readonly SignInManager<IdentityUser> _signInManager;
    private readonly IMessageService _messageService; 

[HttpPost]
    public async Task<IActionResult> Login(string email, string password, bool rememberMe)
    {
        var user = await _userManager.FindByEmailAsync(email);
        if (user == null)
        {
            ModelState.AddModelError(string.Empty, "Invalid login");
            return View();
        }
        if (!user.EmailConfirmed)
        {
            ModelState.AddModelError(string.Empty, "Confirm your email first");
            return View();
        }

        var passwordSignInResult = await _signInManager.PasswordSignInAsync(user, password, isPersistent: rememberMe, lockoutOnFailure: false);
        if (!passwordSignInResult.Succeeded)
        {
            ModelState.AddModelError(string.Empty, "Invalid login");
            return View();
        }

        return Redirect("~/");
    }

我的实际登录页面

 <form asp-controller="Account" asp-action="Login" method="post">

    <div class="form-group has-feedback">
        <input type="email" class="form-control" name="email" id="email" placeholder="Email">
        <span class="glyphicon glyphicon-envelope form-control-feedback"></span>
    </div>
    <div class="form-group has-feedback">
        <input type="password" class="form-control" id="password" placeholder="Password">
        <span class="glyphicon glyphicon-lock form-control-feedback"></span>
    </div>
    <div class="row">
        <div class="col-xs-8">
            <div class="checkbox icheck">
                <label>
                    <input type="checkbox" name="rememberMe" value="true"> Remember Me
                    <input type="hidden" name="rememberMe" value="false" />

                </label>
            </div>
        </div>
        <!-- /.col -->
        <div class="col-xs-4">
            <button type="submit" class="btn btn-primary btn-block btn-flat">Sign In</button>
        </div>
        <!-- /.col -->
    </div>
    </form> 

毕竟,这个变量是假的,任何人都有任何想法。

@if (User.Identity.IsAuthenticated)
{
    <p>User @User.Identity.Name is signed in. <a href="/Account/Logout">Logout</a> </p>

}
else
{
    <p>No user is signed in.</p>
}

编辑2 这是我完整的启动方法,现在在下面的评论后问题,我仍然有相同的结果用户未经过身份验证。

 public Startup(IHostingEnvironment env)
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
            .AddEnvironmentVariables();
        Configuration = builder.Build();
    }

    public IConfigurationRoot Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        // Add framework services.
        services.AddMvc();
        services.AddDbContext<IdentityDbContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"),b=>b.MigrationsAssembly("solitudeeccore")));
        services.AddIdentity<IdentityUser, IdentityRole>()
   .AddEntityFrameworkStores<IdentityDbContext>()
   .AddDefaultTokenProviders();
        services.AddTransient<IMessageService, FileMessageService>();
        services.AddAuthentication();            
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        loggerFactory.AddConsole(Configuration.GetSection("Logging"));
        loggerFactory.AddDebug();
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();                
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
        }

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


    }

0 个答案:

没有答案