public Task ValidateAsync(ResourceOwnerPasswordValidationContext context) { AppDbContext _appContext = new AppDbContext(); // cannot use _appContext; SysAppusers user = _appContext.SysAppusers.Where(user => user.Username == context.UserName && user.Password == context.Password).FirstOrDefault(); // var user = new SysAppusers // { // Userid = "abcc", // Username = "******", // Passwd = "password", // Email = "*****@*****.**" // }; // Console.WriteLine(context.ToString()); if (user == null) { GrantValidationResult result = new GrantValidationResult(); result.Error = "invalid_user"; result.ErrorDescription = "Username or password invalid"; result.IsError = true; context.Result = result; return(Task.FromResult(0)); } context.Result = new GrantValidationResult(user.Userid.ToString(), "password", new List <Claim> { new Claim("username", user.Username), new Claim("email", user.Email), // new Claim("roles",), new Claim("roles", "user"), }); return(Task.FromResult(0)); }
private async Task <SysAppusers> AutoProvisionUserAsync(string provider, string providerUserId, IEnumerable <Claim> claims) { // create a list of claims that we want to transfer into our store var filtered = new List <Claim>(); // user's display name var name = claims.FirstOrDefault(x => x.Type == JwtClaimTypes.Name)?.Value ?? claims.FirstOrDefault(x => x.Type == ClaimTypes.Name)?.Value; if (name != null) { filtered.Add(new Claim(JwtClaimTypes.Name, name)); } else { var first = claims.FirstOrDefault(x => x.Type == JwtClaimTypes.GivenName)?.Value ?? claims.FirstOrDefault(x => x.Type == ClaimTypes.GivenName)?.Value; var last = claims.FirstOrDefault(x => x.Type == JwtClaimTypes.FamilyName)?.Value ?? claims.FirstOrDefault(x => x.Type == ClaimTypes.Surname)?.Value; if (first != null && last != null) { filtered.Add(new Claim(JwtClaimTypes.Name, first + " " + last)); } else if (first != null) { filtered.Add(new Claim(JwtClaimTypes.Name, first)); } else if (last != null) { filtered.Add(new Claim(JwtClaimTypes.Name, last)); } } // email var email = claims.FirstOrDefault(x => x.Type == JwtClaimTypes.Email)?.Value ?? claims.FirstOrDefault(x => x.Type == ClaimTypes.Email)?.Value; if (email != null) { filtered.Add(new Claim(JwtClaimTypes.Email, email)); } var user = new SysAppusers { Username = Guid.NewGuid().ToString(), }; var identityResult = await _userManager.CreateAsync(user); if (!identityResult.Succeeded) { throw new Exception(identityResult.Errors.First().Description); } if (filtered.Any()) { identityResult = await _userManager.AddClaimsAsync(user, filtered); if (!identityResult.Succeeded) { throw new Exception(identityResult.Errors.First().Description); } } identityResult = await _userManager.AddLoginAsync(user, new UserLoginInfo(provider, providerUserId, provider)); if (!identityResult.Succeeded) { throw new Exception(identityResult.Errors.First().Description); } return(user); }