c# - _ViewStart.cshtml 从不执行 SignInManager.IsSignedIn(User)
问题描述
我遇到了一个问题,我在登录后尝试对用户进行身份验证,但看起来 SignInManager.IsSignedIn(User) 总是错误的。我尝试了许多不同的方法,包括从以下位置更改 _LoginPartial:
@inject SignInManager<IdentityUser> SignInManager
@inject UserManager<IdentityUser> UserManager
至:
@inject SignInManager<User> SignInManager
@inject UserManager<User> UserManager
搞乱 Startup.cs 服务
我的 _LoginPartial.cshtml:
@using Microsoft.AspNetCore.Identity
@inject SignInManager<User> SignInManager
@inject UserManager<User> UserManager
<ul class="navbar-nav">
@if (SignInManager.IsSignedIn(User))
{
<li class="nav-item">
<a class="nav-link text-dark" asp-area="Identity" asp-page="/Account/Manage/Index" title="Manage">Hello @User.Identity.Name!</a>
</li>
<li class="nav-item">
<form class="form-inline" asp-area="Identity" asp-page="/Account/Logout" asp-route-returnUrl="@Url.Action("Index", "Home", new { area = "" })">
<button type="submit" class="nav-link btn btn-link text-dark">Logout</button>
</form>
</li>
}
else
{
<li class="nav-item">
<a class="nav-link text-dark" asp-controller="Account" asp-action="Register">Register</a>
</li>
<li class="nav-item">
<a class="nav-link text-dark" asp-controller="Account" asp-action="Login">Login</a>
</li>
}
</ul>
我的 User.cs 类
{
public class User: IdentityUser
{
override public string Id { get; set; }
public virtual ICollection<Role> Roles { get; set; }
}
}
*数据库上下文
public class ApplicationDbContext : IdentityDbContext<User>
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options): base(options){ }
public ApplicationDbContext()
{
}
private string connectionString = ******
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder
.UseMySql(connectionString, new MySqlServerVersion(new Version(8, 0, 25)))
.UseLoggerFactory(LoggerFactory.Create(b => b
.AddConsole()
.AddFilter(level => level >= LogLevel.Information)))
.EnableSensitiveDataLogging()
.EnableDetailedErrors();
}
}
启动.cs
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
string mySqlConnectionStr = Configuration.GetConnectionString("DefaultConnection");
services.AddDbContext<ApplicationDbContext>(options =>
options.UseMySql(mySqlConnectionStr, ServerVersion.AutoDetect(mySqlConnectionStr)));
services.AddDefaultIdentity<User>()
.AddEntityFrameworkStores<ApplicationDbContext>();
services.AddScoped<SignInManager<User>, SignInManager<User>>();
services.AddControllersWithViews();
services.AddRazorPages();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
}
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.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapRazorPages();
});
}
}
我一整天都在努力解决这个问题,所以任何建议都将不胜感激
解决方案
推荐阅读
- rdf - 描述业务事务三元组的现有本体(元数据)
- android - Cardview里面的Android-webview,棒棒糖上没有圆角
- mysql - 如何在 sequelize-mySql 中查找父表没有子记录的记录
- shopify - 按键排序元字段
- pandas - 熊猫数据框在组内的列中找到低于某个值的最后一个值
- flutter - Flutter 中类似 Tinder 的导航
- selenium - 如何在 chromedriver 中禁用“navigator.webdriver”?
- filter - 无法在ansible中的单引号之间添加单引号
- sql - 是否可以从视图构建一个 ssas 立方体?
- javascript - 为什么我的 YouTube React 组件会在播放下一个视频之前触发两次 PlayerState.ENDED 事件?