public async Task <IActionResult> Login(UserForLoginDto userForLoginDto) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } var userFromRepo = await _repo.Login(userForLoginDto.Username.ToLower(), userForLoginDto.Password, userForLoginDto.SchoolName1); if (userFromRepo == null) { _response.Success = false; _response.Message = CustomMessage.UserUnAuthorized; return(Ok(_response)); } var regNo = _config.GetSection("AppSettings:SchoolRegistrationNo").Value; dynamic schoolBranchDetails = await _repo.GetSchoolDetails(regNo, userFromRepo.SchoolBranchId); Claim[] claims = new[] { new Claim(Enumm.ClaimType.NameIdentifier.ToString(), userFromRepo.Id.ToString()), new Claim(Enumm.ClaimType.Name.ToString(), userFromRepo.Username), new Claim(Enumm.ClaimType.BranchIdentifier.ToString(), userForLoginDto.SchoolName1 > 0 ? userForLoginDto.SchoolName1.ToString() : schoolBranchDetails.branch.Id.ToString()), new Claim(ClaimTypes.Role, userFromRepo.Role), new Claim(Enumm.ClaimType.ExamType.ToString(), schoolBranchDetails.schoolExamType.ToString()) }; var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config.GetSection("AppSettings:Token").Value)); var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha512Signature); var tokenDescriptor = new SecurityTokenDescriptor { Subject = new ClaimsIdentity(claims), Expires = DateTime.UtcNow.AddDays(5), SigningCredentials = creds }; var tokenHandler = new JwtSecurityTokenHandler(); var token = tokenHandler.CreateToken(tokenDescriptor); var NameIdentifier = Convert.ToInt32(claims.FirstOrDefault(x => x.Type.Equals(Enumm.ClaimType.NameIdentifier.ToString())).Value); var Role = claims.FirstOrDefault(x => x.Type.Equals(ClaimTypes.Role.ToString())).Value; dynamic CSName = new ExpandoObject(); if (Role == Enumm.UserType.Student.ToString() || Role == Enumm.UserType.Teacher.ToString()) { CSName = (from u in _context.Users join csUser in _context.ClassSectionUsers on u.Id equals csUser.UserId join cs in _context.ClassSections on csUser.ClassSectionId equals cs.Id where csUser.UserId == NameIdentifier && u.Role == Role select new { ClassSectionId = cs.Id, ClassName = _context.Class.FirstOrDefault(m => m.Id == cs.ClassId && m.Active == true) != null ? _context.Class.FirstOrDefault(m => m.Id == cs.ClassId && m.Active == true).Name : "", SectionName = _context.Sections.FirstOrDefault(m => m.Id == cs.SectionId && m.Active == true) != null ? _context.Sections.FirstOrDefault(m => m.Id == cs.SectionId && m.Active == true).SectionName : "", }).FirstOrDefault(); } _response.Data = new { loggedInUserId = claims.FirstOrDefault(x => x.Type.Equals(Enumm.ClaimType.NameIdentifier.ToString())).Value, loggedInUserName = claims.FirstOrDefault(x => x.Type.Equals(Enumm.ClaimType.Name.ToString())).Value, role = claims.FirstOrDefault(x => x.Type.Equals(ClaimTypes.Role.ToString())).Value, schoolName = schoolBranchDetails.school.Name, schoolLogo = schoolBranchDetails.logo, token = tokenHandler.WriteToken(token), classSectionName = GenericFunctions.IsPropertyExist(CSName, "ClassName") && GenericFunctions.IsPropertyExist(CSName, "SectionName") ? CSName.ClassName + " " + CSName.SectionName : "", classSectionId = GenericFunctions.IsPropertyExist(CSName, "ClassSectionId") ? CSName.ClassSectionId : "", schoolExamType = schoolBranchDetails.schoolExamType, }; _response.Success = true; return(base.Ok(_response)); }