public static async Task <string> GenerateToken(YouQuizUser user) { var now = DateTime.UtcNow; var claims = new[] { new Claim(ClaimTypes.Sid, $"{user.Id}"), new Claim(ClaimTypes.Email, user.Email), new Claim("FirstName", user.FirstName), new Claim("LastName", user.LastName), new Claim(ClaimTypes.Gender, Enum.GetName(typeof(Gender), user.Gender)), new Claim(ClaimTypes.Role, user.UserType.ToString()), new Claim(ClaimTypes.Name, user.UserName ?? " "), new Claim(ClaimTypes.PrimarySid, $"{user.Id}"), new Claim(ClaimTypes.MobilePhone, user.PhoneNumber ?? " "), new Claim(JwtRegisteredClaimNames.Jti, await Task.FromResult(Guid.NewGuid().ToString())), new Claim(JwtRegisteredClaimNames.Iat, new DateTimeOffset(now).ToUniversalTime().ToUnixTimeSeconds().ToString(), ClaimValueTypes.Integer64), // new Claim(IdentityClaim, Guid.NewGuid().AsKey()+SequenceGenerator.NextSequence), //new Claim(LicenseClaim, Encrypt(key)), //new Claim("Secondary", Encrypt(secondary)), //new Claim("Last", $"{user.CurrentLogin:F}"), //new Claim(nameof(user.Scope), $"{user.Scope}") }; return(GetToken(claims)); }
public async Task <IActionResult> SignUp([FromBody] SignUpUser user) { try { var u = new YouQuizUser() { Email = user.Email, UserType = Enum.GetName(typeof(UserType), user.UserType),//Enum.Parse<UserType>(user.UserType.ToString()).ToString(), Gender = user.Gender, FirstName = user.FirstName, LastName = user.LastName, UserName = $"{user.FirstName.ToLower()[0]}{user.LastName}" }; var dbUser = await _userManager.CreateAsync(u); if (dbUser.Succeeded) { var r = await _userManager.AddPasswordAsync(u, user.Password); if (r.Succeeded) { return(Ok(new { status = true, message = "User creation succeeded!" })); } else { var userToDelete = new YouQuizUser() { Email = u.Email }; await _userManager.DeleteAsync(userToDelete); throw new Exception("User password hashing failed!"); } } else { throw new Exception("User creation failed! " + dbUser.Errors.FirstOrDefault().Description); } } catch (Exception e) { _logger.LogError(e.ToString() ?? e.Message); return(BadRequest(new { status = false, message = e.Message ?? e.ToString() })); } }