【问题标题】:How to access the database data in OnSignedIn .net Core - Entity framework如何在 OnSignedIn .net Core - 实体框架中访问数据库数据
【发布时间】:2021-05-10 17:21:03
【问题描述】:

当用户登录到 .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));

        }
    }

【问题讨论】:

    标签: c# entity-framework asp.net-core-mvc asp.net-identity asp.net-core-3.1


    【解决方案1】:

    您可以通过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;
            }
        };
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-16
      • 1970-01-01
      • 2011-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多