C# ASP.NET Web表单获取当前用户电子邮件并分配有关用户身份的数据

C# ASP.NET Web表单获取当前用户电子邮件并分配有关用户身份的数据,c#,asp.net,asp.net-identity,C#,Asp.net,Asp.net Identity,我正在构建一个Web表单网站,它使用ASP身份验证和两个数据库来存储数据。当用户注册时,它会在这两个表上创建记录,这是my register.aspx C#代码: if(result.successed) { infolicensia.license_activations++; res\u users regUser=新res\u用户 { branch_gkey=infolicensia.branch_gkey, 许可证, activo=true, fecha_registro=日期时间。现在

我正在构建一个Web表单网站,它使用ASP身份验证和两个数据库来存储数据。当用户注册时,它会在这两个表上创建记录,这是my register.aspx C#代码:

if(result.successed)
{
infolicensia.license_activations++;
res\u users regUser=新res\u用户
{
branch_gkey=infolicensia.branch_gkey,
许可证,
activo=true,
fecha_registro=日期时间。现在,
email=user.email
};
db.res_users.Add(regUser);
db.SaveChanges();
//关于承包商的信息,请访问http://go.microsoft.com/fwlink/?LinkID=320771
//字符串代码=manager.GenerateEmailConfirmationToken(user.Id);
//string callbackUrl=IdentityHelper.GetUserConfirmationRedirectUrl(代码、用户Id、请求);
//manager.sendmail(user.Id,“Confirmar cuenta”,“Para Confirmar la cuenta,haga clic.”);
signInManager.SignIn(用户,isPersistent:false,rememberBrowser:false);
IdentityHelper.RedirectToReturnUrl(Request.QueryString[“ReturnUrl”],响应);
}
这很好,但现在我需要检索存储在另一个数据库上的数据,并使其可用于用户会话

我已在IdentityModels.cs上试用过:

 public class ApplicationUser : IdentityUser
    {
        public ClaimsIdentity GenerateUserIdentity(ApplicationUserManager manager)
        {
            // Tenga en cuenta que authenticationType debe coincidir con el valor definido en CookieAuthenticationOptions.AuthenticationType
            var userIdentity = manager.CreateIdentity(this, DefaultAuthenticationTypes.ApplicationCookie);
            // Agregar reclamaciones de usuario personalizadas aquí
            var Database2 = new PPublicEntities();
            var UserData = Database2.res_users.Single(i => i.email == Email);
            userIdentity.AddClaim(new Claim("BranchId", UserData.branch_gkey.ToString()));

            return userIdentity;
        }

        public Task<ClaimsIdentity> GenerateUserIdentityAsync(ApplicationUserManager manager)
        {
            return Task.FromResult(GenerateUserIdentity(manager));
        }

    }
公共类应用程序用户:IdentityUser
{
公共索赔实体生成安全性(ApplicationUserManager)
{
//Tenga en cuenta que authenticationType debe coincidir con el valor definido en Cookie AuthenticationOptions.authenticationType
var userIdentity=manager.CreateIdentity(这是DefaultAuthenticationTypes.ApplicationOkie);
//阿格雷加·雷卡马奇奥尼斯·德乌萨里奥·阿奎
var Database2=新的PPublicenties();
var UserData=Database2.res_users.Single(i=>i.email==email);
userIdentity.AddClaim(新声明(“BranchId”,UserData.branchgkey.ToString());
返回用户身份;
}
公共任务GenerateUserIdentityAsync(ApplicationUserManager)
{
返回任务.FromResult(GenerateUserIdentity(manager));
}
}

但此电子邮件属性为空,我需要当前用户的电子邮件在其他数据库中搜索其数据。我以为这个电子邮件属性是在登录时填写的,我真的不知道该怎么办,也不知道为什么所有声明值都必须是字符串?我真的希望它可以是一个长类型。

默认情况下,用户电子邮件不会在身份验证期间添加到用户声明中。我们必须在下面的代码片段中明确地添加这个

userIdentity.AddClaim(new Claim(Constants.EmailClaimType, "User Email", ClaimValueTypes.String));
您还可以编写一个小方法来检索当前用户声明信息。电邮:

public static string GetCurrentUserEmail()
        {
            var userEmail = string.Empty;
            var claimIdentity = new ClaimsIdentity(Thread.CurrentPrincipal.Identity);
            var userEmailClaim = claimIdentity.Claims.FirstOrDefault(x => x.Type == IdentityConstants.EmailClaimType);

            if (userEmailClaim != null)
            {
                userEmail = userEmailClaim.Value;
            }
            return userEmail;
        }

您可能想看看我在以下位置创建的库:

默认情况下,身份验证期间未将用户电子邮件添加到用户声明中。我们必须在下面的代码片段中明确地添加这个

userIdentity.AddClaim(new Claim(Constants.EmailClaimType, "User Email", ClaimValueTypes.String));
您还可以编写一个小方法来检索当前用户声明信息。电邮:

public static string GetCurrentUserEmail()
        {
            var userEmail = string.Empty;
            var claimIdentity = new ClaimsIdentity(Thread.CurrentPrincipal.Identity);
            var userEmailClaim = claimIdentity.Claims.FirstOrDefault(x => x.Type == IdentityConstants.EmailClaimType);

            if (userEmailClaim != null)
            {
                userEmail = userEmailClaim.Value;
            }
            return userEmail;
        }

您可能想看看我在以下位置创建的库:

我是asp网上的新手,Constants.EmailClaimType做什么?那个方法在哪里声明?在IdentityModels或其他地方?Constants.EmailClaimType可以是任何常量字符串。我将其声明为“ASP.NET.UserEmailClaim”,以便在阅读用户声明时可以使用它。我在identity framework上创建了一个完整的库,并在其中声明了此方法。我已经在上面分享了GItHub回购地址。您可以在identitylaimshelper.cs类中找到此方法和其他方法。如果你还想知道什么,请告诉我。我是asp网上的新手,Constants.EmailClaimType做什么?那个方法在哪里声明?在IdentityModels或其他地方?Constants.EmailClaimType可以是任何常量字符串。我将其声明为“ASP.NET.UserEmailClaim”,以便在阅读用户声明时可以使用它。我在identity framework上创建了一个完整的库,并在其中声明了此方法。我已经在上面分享了GItHub回购地址。您可以在identitylaimshelper.cs类中找到此方法和其他方法。如果你还想知道什么,请告诉我。