public async Task <IActionResult> Register([FromBody] RegisterDto registerDto) { try { // validation if (registerDto == null) { return(BadRequest()); } if (!await _roleMgr.RoleExistsAsync(registerDto.Role)) { String[] acceptedRoles = new String[_roleMgr.Roles.Count()]; int counter = 0; foreach (IdentityRole role in _roleMgr.Roles.Where(role => !role.ToString().Equals("Admin"))) { acceptedRoles[counter] = role.ToString(); counter++; } return(BadRequest(String.Join(",", acceptedRoles))); } if (registerDto.Role.Equals("Admin", StringComparison.CurrentCultureIgnoreCase)) { return(BadRequest()); } if (await _userManager.FindByEmailAsync(registerDto.Email) != null) { return(BadRequest("Email already exists")); } // register user var user = new PracticaUser { UserName = registerDto.Email, Email = registerDto.Email }; var result = await _userManager.CreateAsync(user, registerDto.Password); var roleResult = await _userManager.AddToRoleAsync(user, registerDto.Role); if (result.Succeeded && roleResult.Succeeded) { return(Ok(await CreateToken(user))); } } catch (Exception ex) { _logger.LogError($"Exception thorwn while registering : {ex}"); } return(BadRequest("Failed to register")); }
public async Task <Object> CreateToken(PracticaUser user) { try { if (user != null) { var claims = new List <Claim> { new Claim(JwtRegisteredClaimNames.Sub, user.UserName), new Claim(JwtRegisteredClaimNames.Sid, user.Id), new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()) }; // add roles to claims for autorization var userRoles = await _userManager.GetRolesAsync(user); foreach (var userRole in userRoles) { claims.Add(new Claim(ClaimTypes.Role, userRole)); } var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config["Token:Key"])); var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); var token = new JwtSecurityToken( issuer: _config["Token:Issuer"], audience: _config["Token:Audience"], claims: claims, expires: DateTime.UtcNow.AddMinutes(600), signingCredentials: creds ); return(new { token = new JwtSecurityTokenHandler().WriteToken(token) }); } }catch (Exception ex) { _logger.LogError($"Exception thrown while creating JWT : {ex}"); throw ex; } throw new ApplicationException("UNKNOWN_ERROR"); }
public async Task Seed() { var user = await _userMgr.FindByNameAsync("testadmin"); // Add Users if (user == null) { if (!(await _roleMgr.RoleExistsAsync("Admin"))) { var role = new IdentityRole("Admin"); await _roleMgr.CreateAsync(role); } if (!(await _roleMgr.RoleExistsAsync("Student"))) { var role = new IdentityRole("Student"); await _roleMgr.CreateAsync(role); } if (!(await _roleMgr.RoleExistsAsync("Teacher"))) { var role = new IdentityRole("Teacher"); await _roleMgr.CreateAsync(role); } if (!(await _roleMgr.RoleExistsAsync("Company"))) { var role = new IdentityRole("Company"); await _roleMgr.CreateAsync(role); } // Add admin user = new PracticaUser() { UserName = "******", Email = "*****@*****.**" }; var userResult = await _userMgr.CreateAsync(user, "Pp123456#"); var roleResult = await _userMgr.AddToRoleAsync(user, "Admin"); //var claimResult = await _userMgr.AddClaimAsync(user, new Claim("SuperUser", "True")); if (!userResult.Succeeded || !roleResult.Succeeded) { throw new InvalidOperationException("Failed to build admin users and role"); } // Add student user = new PracticaUser() { UserName = "******", Email = "*****@*****.**" }; userResult = await _userMgr.CreateAsync(user, "Pp123456#"); roleResult = await _userMgr.AddToRoleAsync(user, "Student"); if (!userResult.Succeeded || !roleResult.Succeeded) { throw new InvalidOperationException("Failed to build student users and role"); } // Add teacher user = new PracticaUser() { UserName = "******", Email = "*****@*****.**" }; userResult = await _userMgr.CreateAsync(user, "Pp123456#"); roleResult = await _userMgr.AddToRoleAsync(user, "Teacher"); if (!userResult.Succeeded || !roleResult.Succeeded) { throw new InvalidOperationException("Failed to build teacher users and role"); } // Add company user = new PracticaUser() { UserName = "******", Email = "*****@*****.**" }; userResult = await _userMgr.CreateAsync(user, "Pp123456#"); roleResult = await _userMgr.AddToRoleAsync(user, "Company"); if (!userResult.Succeeded || !roleResult.Succeeded) { throw new InvalidOperationException("Failed to build company users and role"); } } // Add Activity type var activityType = _context.ActivityTypes.FirstOrDefault(); if (activityType == null) { ICollection <ActivityType> activityTypes = new List <ActivityType>(); activityTypes.Add( new ActivityType() { Code = "practica", Description = "practica" } ); activityTypes.Add( new ActivityType() { Code = "curs", Description = "curs" } ); activityTypes.Add( new ActivityType() { Code = "eveniment", Description = "eveniment" } ); _context.ActivityTypes.AddRange(activityTypes); _context.SaveChanges(); } }