बस अगर कोई भी दिलचस्पी रखता है तो यह मेरे लिए काम करता है। मेरे पास एक कस्टम पहचान है जो प्राथमिक कुंजी के लिए int का उपयोग करता है इसलिए मैं GetUserAsync विधि को ओवररोड करता हूं
GetUserAsync को ओवरराइड करें
public override Task<User> GetUserAsync(ClaimsPrincipal principal)
{
var userId = GetUserId(principal);
return FindByNameAsync(userId);
}
पहचान उपयोगकर्ता प्राप्त करें
var user = await _userManager.GetUserAsync(User);
यदि आप एक नियमित दिशानिर्देश प्राथमिक कुंजी का उपयोग कर रहे हैं तो आपको GetUserAsync को ओवरराइड करने की आवश्यकता नहीं है। यह सब मान रहा है कि आपने टोकन सही तरीके से कॉन्फ़िगर किया है।
public async Task<string> GenerateTokenAsync(string email)
{
var user = await _userManager.FindByEmailAsync(email);
var tokenHandler = new JwtSecurityTokenHandler();
var key = Encoding.ASCII.GetBytes(_tokenProviderOptions.SecretKey);
var userRoles = await _userManager.GetRolesAsync(user);
var roles = userRoles.Select(o => new Claim(ClaimTypes.Role, o));
var claims = new[]
{
new Claim(JwtRegisteredClaimNames.Sub, user.UserName),
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
new Claim(JwtRegisteredClaimNames.Iat, DateTime.UtcNow.ToString(CultureInfo.CurrentCulture)),
new Claim(JwtRegisteredClaimNames.GivenName, user.FirstName),
new Claim(JwtRegisteredClaimNames.FamilyName, user.LastName),
new Claim(JwtRegisteredClaimNames.Email, user.Email),
}
.Union(roles);
var tokenDescriptor = new SecurityTokenDescriptor
{
Subject = new ClaimsIdentity(claims),
Expires = DateTime.UtcNow.AddHours(_tokenProviderOptions.Expires),
SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
};
var token = tokenHandler.CreateToken(tokenDescriptor);
return Task.FromResult(new JwtSecurityTokenHandler().WriteToken(token)).Result;
}