Esempio n. 1
0
        public async Task <bool> Bind([FromBody] OpenIdBindingModel model)
        {
            if (model == null)
            {
                throw new ArgumentNullException(nameof(model));
            }

            return(await _service.BindAsync(model));
        }
Esempio n. 2
0
        /// <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);
        }