możesz użyć poniższego kodu.
funkcji Dodaj do klasy ApplicationSignInManager w Identity.Config.cs
public override Task SignInAsync(ApplicationUser user, bool isPersistent, bool rememberBrowser)
{
var claims = new List<Claim>()
{
new Claim(ClaimTypes.NameIdentifier, user.Id),
new Claim(ClaimTypes.Email, user.Email)
};
this.AuthenticationManager.User.AddIdentity(new ClaimsIdentity(claims));
return base.SignInAsync(user, isPersistent, rememberBrowser);
}
Spróbuj ths kod
private ClaimsPrincipal GetCurrentUser()
{
var context = HttpContext.GetOwinContext();
if (context == null)
return null;
if (context.Authentication == null || context.Authentication.User == null)
return null;
return context.Authentication.User;
}
private string GetUserId()
{
var user = GetCurrentUser();
if (user == null)
return null;
var claim = user.Claims.FirstOrDefault(o => o.Type == ClaimTypes.NameIdentifier);
if (claim == null)
return null;
return claim.Value;
}
private string GetUserEmail()
{
var user = GetCurrentUser();
if (user == null)
return null;
var claim = user.Claims.FirstOrDefault(o => o.Type == ClaimTypes.Email);
if (claim == null)
return null;
return claim.Value;
}
Trzeba tworzyć niestandardowe ExternalSignInAsync methiod który powróci model z ID użytkownika i wyników sukcesu. Sprawdź pakiet Install-Package Microsoft.AspNet.Identity.Samples nuget, aby uzyskać więcej informacji. – DSR
Możliwy duplikat [Używanie tożsamości MVC 5, nie można uzyskać nazwy użytkownika zaraz po zalogowaniu] (http://stackoverflow.com/questions/30429373/using-mvc-5s-identity-cant-get-user-name- zaraz po zalogowaniu) –