private async Task <(string, JwtRefreshTokenModel)> _getTokenAndRefresh(ClaimsIdentity identity, string userName, string[] roles, ApplicationUser user) { var jwt = await TokenIssuer.GenerateJwt( identity, _jwtFactory, userName, roles, _jwtOptions, new JsonSerializerSettings { Formatting = Formatting.Indented } ); var refresh = TokenIssuer.GenerateRefreshToken(128); user.AddRefreshToken( refresh, _contextAccessor.HttpContext.Connection.RemoteIpAddress.ToString()); await _unitOfWork.CompleteAsync(); return(jwt.Token, new JwtRefreshTokenModel(refresh, jwt)); }
private async Task <JwtRefreshTokenModel> _processUserDetails(FacebookUserData userInfo) { // 4. ready to create the local user account (if necessary) and jwt var user = await _userManager.FindByEmailAsync(userInfo.Email); if (user is null) { var appUser = new ApplicationUser { FirstName = userInfo.FirstName, LastName = userInfo.LastName, FacebookId = userInfo.Id, Email = userInfo.Email, UserName = userInfo.Email, PictureUrl = userInfo.Picture.Data.Url }; var result = await _userManager.CreateAsync(appUser, Convert.ToBase64String(Guid.NewGuid().ToByteArray()).Substring(0, 8)); if (!result.Succeeded) { throw new InvalidOperationException( ModelState.ToString() ); } } else { user.PictureUrl = userInfo.Picture.Data.Url; var result = await _userManager.UpdateAsync(user); if (!result.Succeeded) { throw new InvalidOperationException( ModelState.ToString() ); } } // generate the jwt for the local user... var localUser = await _userManager.FindByNameAsync(userInfo.Email); if (localUser is null) { throw new InvalidOperationException( ModelState.ToString() ); } var roles = await _userManager.GetRolesAsync(localUser); var jwt = await TokenIssuer.GenerateJwt( _jwtFactory.GenerateClaimsIdentity(localUser.UserName, localUser.Id), _jwtFactory, localUser.UserName, roles.ToArray <string>(), _jwtOptions, new JsonSerializerSettings { Formatting = Formatting.Indented }); var refresh = TokenIssuer.GenerateRefreshToken(128); user.AddRefreshToken( refresh, _contextAccessor.HttpContext.Connection.RemoteIpAddress.ToString()); await _unitOfWork.CompleteAsync(); return(new JwtRefreshTokenModel(refresh, jwt)); }