如何在 OnSignedIn .net Core 中访问数据库数据 - Entity framework
How to access the database data in OnSignedIn .net Core - Entity framework
当用户登录到 .net 核心 MVC 程序时,我需要使用登录的用户 ID 从数据库中查看特定于用户的数据,并将这些数据保存到当前 cookie。以下是我现在正在走的路。告诉我如果出现问题该怎么做。
有什么方法可以访问
dbcontext.footable.where(x=> x.id = "somevalue")
Startup.cs
services.ConfigureIdentitySettings(apiSetting);
ConfigureIdentitySettings.cs
public static class IdentitySettingsExtensions
{
// Identity Setup
public static void ConfigureIdentitySettings(this IServiceCollection services, IConfigurationSection apiSetting)
{
services.ConfigureApplicationCookie(options =>
{
options.Cookie.Name = "foo";
options.ExpireTimeSpan = TimeSpan.FromMinutes(Configurations.ExipireTimeSpan);
options.ReturnUrlParameter = CookieAuthenticationDefaults.ReturnUrlParameter;
options.LoginPath = Configurations.LoginPath;
options.LogoutPath = Configurations.LogoutPath;
options.AccessDeniedPath = Configurations.AccessDeniedPath;
options.SlidingExpiration = true;
options.Events = new CookieAuthenticationEvents
{
OnSignedIn = context =>
{
// Here i got current logged in user id
var loggedInUserRole = context.Principal.GetLoggedInUserId();
//I need to access database data from here after that adding those data into current cookie
return Task.CompletedTask;
}
};
});
services.Configure<IdentityOptions>(options =>
{
// Providers
//options.Tokens.PasswordResetTokenProvider = PasswordResetTokenProviderName;
//options.Tokens.EmailConfirmationTokenProvider = ConfirmEmailTokenProviderName;
options.SignIn.RequireConfirmedEmail = true;
options.User.RequireUniqueEmail = true;
options.Password.RequireUppercase = Configurations.RequireUppercase;
options.Password.RequireLowercase = Configurations.RequireLowercase;
options.Password.RequireDigit = Configurations.RequireDigit;
options.Password.RequiredLength = Configurations.RequireLength;
options.Password.RequireNonAlphanumeric = Configurations.RequireNonAlphanumeric;
});
var firstLifeSpan = Convert.ToInt32(apiSetting["FirstEmailConfirmationLifeSpan"]);
var secondLifeSpan = Convert.ToInt32(apiSetting["SecondEmailConfirmationLifeSpan"]);
services.Configure<DataProtectionTokenProviderOptions>(o =>
o.TokenLifespan = TimeSpan.FromDays(firstLifeSpan > secondLifeSpan ? firstLifeSpan : secondLifeSpan));
}
}
您可以在 OnSignedIn
方法中访问数据库数据,如下所示:
services.ConfigureApplicationCookie(options =>
{
//...
options.Events = new CookieAuthenticationEvents
{
OnSignedIn = context =>
{
//Build an intermediate service provider
var sp = services.BuildServiceProvider();
//Resolve the services from the service provider
var myDbContext = sp.GetService<ApplicationDbContext>();
//access database data...
var data = myDbContext.footable.Where(x => x.Id== "xxx");
//...
return Task.CompletedTask;
}
};
});
当用户登录到 .net 核心 MVC 程序时,我需要使用登录的用户 ID 从数据库中查看特定于用户的数据,并将这些数据保存到当前 cookie。以下是我现在正在走的路。告诉我如果出现问题该怎么做。
有什么方法可以访问
dbcontext.footable.where(x=> x.id = "somevalue")
Startup.cs
services.ConfigureIdentitySettings(apiSetting);
ConfigureIdentitySettings.cs
public static class IdentitySettingsExtensions
{
// Identity Setup
public static void ConfigureIdentitySettings(this IServiceCollection services, IConfigurationSection apiSetting)
{
services.ConfigureApplicationCookie(options =>
{
options.Cookie.Name = "foo";
options.ExpireTimeSpan = TimeSpan.FromMinutes(Configurations.ExipireTimeSpan);
options.ReturnUrlParameter = CookieAuthenticationDefaults.ReturnUrlParameter;
options.LoginPath = Configurations.LoginPath;
options.LogoutPath = Configurations.LogoutPath;
options.AccessDeniedPath = Configurations.AccessDeniedPath;
options.SlidingExpiration = true;
options.Events = new CookieAuthenticationEvents
{
OnSignedIn = context =>
{
// Here i got current logged in user id
var loggedInUserRole = context.Principal.GetLoggedInUserId();
//I need to access database data from here after that adding those data into current cookie
return Task.CompletedTask;
}
};
});
services.Configure<IdentityOptions>(options =>
{
// Providers
//options.Tokens.PasswordResetTokenProvider = PasswordResetTokenProviderName;
//options.Tokens.EmailConfirmationTokenProvider = ConfirmEmailTokenProviderName;
options.SignIn.RequireConfirmedEmail = true;
options.User.RequireUniqueEmail = true;
options.Password.RequireUppercase = Configurations.RequireUppercase;
options.Password.RequireLowercase = Configurations.RequireLowercase;
options.Password.RequireDigit = Configurations.RequireDigit;
options.Password.RequiredLength = Configurations.RequireLength;
options.Password.RequireNonAlphanumeric = Configurations.RequireNonAlphanumeric;
});
var firstLifeSpan = Convert.ToInt32(apiSetting["FirstEmailConfirmationLifeSpan"]);
var secondLifeSpan = Convert.ToInt32(apiSetting["SecondEmailConfirmationLifeSpan"]);
services.Configure<DataProtectionTokenProviderOptions>(o =>
o.TokenLifespan = TimeSpan.FromDays(firstLifeSpan > secondLifeSpan ? firstLifeSpan : secondLifeSpan));
}
}
您可以在 OnSignedIn
方法中访问数据库数据,如下所示:
services.ConfigureApplicationCookie(options =>
{
//...
options.Events = new CookieAuthenticationEvents
{
OnSignedIn = context =>
{
//Build an intermediate service provider
var sp = services.BuildServiceProvider();
//Resolve the services from the service provider
var myDbContext = sp.GetService<ApplicationDbContext>();
//access database data...
var data = myDbContext.footable.Where(x => x.Id== "xxx");
//...
return Task.CompletedTask;
}
};
});