Как получить адрес электронной почты от принципала в ASP.net? - PullRequest
0 голосов
/ 19 декабря 2018

Я пытаюсь получить адрес электронной почты, связанный с текущим пользователем.Ниже показано несколько строк, в которые я добавляю утверждения в процессе аутентификации.

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;
        }
    }

В настоящее время в моих контроллерах я считываю идентификатор пользователя, связанный с пользователем, следующим образом?

[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;
}

Но теперь мне нужнополучить идентификатор пользователя с помощью электронной почты, которую я добавил в аутентификации.Я пытался использовать

Int64 UserID = Convert.ToInt64((User as ClaimsPrincipal).Identity.Email);

, но это не работает.Может ли кто-нибудь помочь мне с этим?

1 Ответ

0 голосов
/ 04 января 2019

Если вы добавите Email в претензиях во время аутентификации, вы можете получить его с помощью:

string email = System.Security.Claims.ClaimsPrincipal.Current.FindFirst(ClaimTypes.Email).Value
...