get current user email in Identity

2019-06-21 22:32发布

I use IIdentity interface For Getting current userid and username.

so implement following Method:

private static IIdentity GetIdentity()
{
    if (HttpContext.Current != null && HttpContext.Current.User != null)
    {
        return HttpContext.Current.User.Identity;
    }

    return ClaimsPrincipal.Current != null ? ClaimsPrincipal.Current.Identity : null;
}

And Add this code: _.For<IIdentity>().Use(() => GetIdentity()); in my IoC Container[structuremap].

Usage

this._identity.GetUserId();
this._identity.GetUserName();
this._identity.IsAuthenticated

Now I Want to Implement GetEmailAdress Method, How To do this?

Example

this._identity.GetEmailAdress();

When use this._identity.GetUserName(); do not get username form database.

2条回答
爷的心禁止访问
2楼-- · 2019-06-21 22:59

You could do something on these lines:

public static class IdentityExtensions
{
    public static string GetEmailAdress(this IIdentity identity)
    {
        var userId = identity.GetUserId();
        using (var context = new DbContext())
        {
            var user = context.Users.FirstOrDefault(u => u.Id == userId);
            return user.Email;
        }
    }        
}

and then you will be able to access it like:

this._identity.GetEmailAdress();
查看更多
不美不萌又怎样
3楼-- · 2019-06-21 23:10

You can get the current user in ASP.NET Identity as shown below:

ApplicationUser user = System.Web.HttpContext.Current.GetOwinContext()
    .GetUserManager<ApplicationUserManager>()
    .FindById(System.Web.HttpContext.Current.User.Identity.GetUserId());

//If you use int instead of string for primary key, use this:
ApplicationUser user = System.Web.HttpContext.Current.GetOwinContext()
    .GetUserManager<ApplicationUserManager>()
    .FindById(Convert.ToInt32(System.Web.HttpContext.Current.User.Identity.GetUserId()));


For getting custom properties from AspNetUsers table:

ApplicationUser user = UserManager.FindByName(userName);
string mail= user.Email;

Hope this helps...

查看更多
登录 后发表回答