public async Task <bool> Bind([FromBody] OpenIdBindingModel model) { if (model == null) { throw new ArgumentNullException(nameof(model)); } return(await _service.BindAsync(model)); }
/// <summary> /// Binds the open ID for the specified user asynchronous. /// </summary> /// <param name="model">The model.</param> /// <returns>A <see cref="Task{TResult}"/> represents the bind operation.</returns> public async Task <bool> BindAsync(OpenIdBindingModel model) { var user = await _userManager.FindByLoginAsync(WChatLoginProvider, model.OpenId); if (user != null) { _logger.LogWarning($"Phone Number {model.PhoneNumber} had bind open id {model.OpenId}"); // find by phone number var byPhone = await _userManager.FindByNameAsync(model.PhoneNumber); var userId1 = await _userManager.GetUserIdAsync(user); var userId2 = await _userManager.GetUserIdAsync(byPhone); if (userId1 == userId2) { return(true); } } user = await _userManager.FindByNameAsync(model.PhoneNumber); if (user == null) { throw new ArgumentException(string.Format(Resources.NotFoundUserByPhoneNumber, model.PhoneNumber)); } var info = new UserLoginInfo(WChatLoginProvider, model.OpenId, "weixin"); var result = await _userManager.AddLoginAsync(user, info); if (!result.Succeeded) { _logger.LogError(result.ToString()); return(false); } // add a claim for this user. result = await _userManager.AddClaimAsync(user, new Claim(OAuthClaimTypes.WChat, model.OpenId)); if (!result.Succeeded) { _logger.LogError($"User: {model.PhoneNumber} add claim error: {result.ToString()}"); } return(true); }