如何从 ASP.net 中的主体获取电子邮件地址?
How to get Email address from the principal in ASP.net?
我正在尝试获取与当前用户关联的电子邮件。
下面显示了我在身份验证中添加的几行声明。
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
var identity = new ClaimsIdentity(context.Options.AuthenticationType);
try
{
CreateDataConnection();
R_AuthenticateUser oAuthUser = oDataConnection.Authenticate(context.UserName,context.Password);
string DB_User_roles = oAuthUser.UserLoginRoles;
if (oAuthUser.Authenticated)
{
string[] aray = DB_User_roles.Split(',');
identity.AddClaim(new Claim(ClaimTypes.Name, oAuthUser.UserID.ToString())); // keeps the login_ID
identity.AddClaim(new Claim(ClaimTypes.Email, context.UserName));
foreach (var item in aray)
{
// identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, item));
identity.AddClaim(new Claim(ClaimTypes.Role, item));
}
context.Validated(identity);
}
else //if (context.UserName == "user" && context.Password == "user")
{
context.SetError("Incorrect credntials", "Provided Username and Password is incorrect");
return;
}
}
catch (Exception ex)
{
int y = 0;
}
}
目前在我的控制器中,我读取与用户关联的 UserID 如下?
[HttpGet]
[PGAuthorization(Roles = "USER")]
[Route("api/Address/GetAllAddresses")]
public string GetAllAddressesByUser()
{
CreateDataConnection();
Int64 UserID = Convert.ToInt64((User as ClaimsPrincipal).Identity.Name);
List<R_CustomerAddress> oUser = oDataConnection.GetAllAddressesByUser(UserID);
string output = JsonConvert.SerializeObject(oUser);
return output;
}
但现在我需要使用我在身份验证中添加的电子邮件来获取用户 ID。我尝试使用
Int64 UserID = Convert.ToInt64((User as ClaimsPrincipal).Identity.Email);
但它不起作用。有人可以帮我吗?
如果你在认证时在声明中添加了Email,你可以通过:
string email = System.Security.Claims.ClaimsPrincipal.Current.FindFirst(ClaimTypes.Email).Value
越短越好:
string email = this.user.FindFirstValue(ClaimTypes.Email);
我正在尝试获取与当前用户关联的电子邮件。 下面显示了我在身份验证中添加的几行声明。
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
var identity = new ClaimsIdentity(context.Options.AuthenticationType);
try
{
CreateDataConnection();
R_AuthenticateUser oAuthUser = oDataConnection.Authenticate(context.UserName,context.Password);
string DB_User_roles = oAuthUser.UserLoginRoles;
if (oAuthUser.Authenticated)
{
string[] aray = DB_User_roles.Split(',');
identity.AddClaim(new Claim(ClaimTypes.Name, oAuthUser.UserID.ToString())); // keeps the login_ID
identity.AddClaim(new Claim(ClaimTypes.Email, context.UserName));
foreach (var item in aray)
{
// identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, item));
identity.AddClaim(new Claim(ClaimTypes.Role, item));
}
context.Validated(identity);
}
else //if (context.UserName == "user" && context.Password == "user")
{
context.SetError("Incorrect credntials", "Provided Username and Password is incorrect");
return;
}
}
catch (Exception ex)
{
int y = 0;
}
}
目前在我的控制器中,我读取与用户关联的 UserID 如下?
[HttpGet]
[PGAuthorization(Roles = "USER")]
[Route("api/Address/GetAllAddresses")]
public string GetAllAddressesByUser()
{
CreateDataConnection();
Int64 UserID = Convert.ToInt64((User as ClaimsPrincipal).Identity.Name);
List<R_CustomerAddress> oUser = oDataConnection.GetAllAddressesByUser(UserID);
string output = JsonConvert.SerializeObject(oUser);
return output;
}
但现在我需要使用我在身份验证中添加的电子邮件来获取用户 ID。我尝试使用
Int64 UserID = Convert.ToInt64((User as ClaimsPrincipal).Identity.Email);
但它不起作用。有人可以帮我吗?
如果你在认证时在声明中添加了Email,你可以通过:
string email = System.Security.Claims.ClaimsPrincipal.Current.FindFirst(ClaimTypes.Email).Value
越短越好:
string email = this.user.FindFirstValue(ClaimTypes.Email);