gpt4 book ai didi

c# - User.Identity.IsAuthenticated 在 PasswordSignInAsync() 成功后为 false

转载 作者:太空狗 更新时间:2023-10-29 23:53:19 26 4
gpt4 key购买 nike

问题涉及 ASP.NET Core 2.0 中的身份验证。

PasswordSignInAsync() 之后,result 的状态为成功。所以我将重定向到 StaticController 中的操作 Chat

    [HttpPost("login")]
public async Task<ActionResult> Login([Bind] LoginModel lm) {

if (!ModelState.IsValid)
return BadRequest(ModelState);

var result = await _signInManager.PasswordSignInAsync(lm.Username, lm.Password, false, false);

if (result.Succeeded)
return RedirectToAction("Login", "Static");
else
return BadRequest(new { message = "Invalid username or password" });
}

StaticController.Chat()

    [HttpGet("/chat")]
public ActionResult Chat() {

if (User.Identity.IsAuthenticated)
return File("~/chat/index.html", "text/html");
else
return RedirectToAction("Login", "Static");
}

这里出现问题是因为 User.Identity.IsAuthenticated 始终为 false。即使在执行 Login() 操作后,我从浏览器 localhost:5000/chat 调用它仍然是错误的。

这些是我找到的相关解决方案,但没有一个有效:

此解决方案已过时。我使用的是 ASP.NET Core 2.0,UseCookieAuthentication() 已过时。 User.Identity.IsAuthenticated always false after PasswordSignInAsync gives success

正如此解决方案中所述 User.Identity.IsAuthenticated returns false after SignInAsync invoked在 Login() 操作之后,我应该再次调用 Chat() 方法(就像我通过 localhost:5000/chat 所做的那样)并且它应该可以工作。那么问题是它没有。

这是我的 Startup.cs:

public class Startup
{
public IConfiguration Configuration { get; }

public Startup(IConfiguration configuration)
{
Configuration = configuration;
}

public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddDbContext<ApplicationDbContext>(options => {
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"));
});

services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();

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

// User settings
options.User.RequireUniqueEmail = true;
});
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}

app.UseStaticFiles();
app.UseMvc();
app.UseAuthentication();
}
}

请帮忙。

最佳答案

这是我的 startup.cs

public class Startup
{
public IConfiguration Configuration { get; private set; }

public Startup(IHostingEnvironment env)
{
var config = new ConfigurationBuilder()
.AddJsonFile("config.json", optional: true)
.SetBasePath(env.ContentRootPath)
.Build();

Configuration = config;
}

public void ConfigureServices(IServiceCollection services)
{
services.ConfigureDataContext(Configuration);

services.AddIdentity<ApplicationUser, IdentityRole>(p =>
{
p.Password.RequireDigit = false;
p.Password.RequireLowercase = false;
p.Password.RequireUppercase = false;
p.Password.RequireNonAlphanumeric = false;
})
.AddEntityFrameworkStores<MyShuttleContext>()
.AddDefaultTokenProviders();

services.ConfigureDependencies();
services.AddMvc();
}

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseStaticFiles();
app.UseAuthentication();
app.ConfigureRoutes();
}
}

这是我的 config.json

{
"DefaultUsername": "carrier",
"DefaultPassword": "******",
"Data": {
"UseInMemoryStore": "false",
"DefaultConnection": {
"ConnectionString": "Server=(localdb)\\MSSQLLocalDB;Database=MyShuttle;Trusted_Connection=True;MultipleActiveResultSets=true"
}
},
"EntityFramework": {
"MyShuttleContext": {
"ConnectionStringKey": "Data:DefaultConnection:ConnectionString"
}
}
}

我的 Controller 代码和你的一样。我对这段代码没有任何问题。您可以尝试检查您的 SQL Server 对象资源管理器以检查表是否正确填充。

关于c# - User.Identity.IsAuthenticated 在 PasswordSignInAsync() 成功后为 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46533804/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com