public async Task <ActionResult> SocialLogin(SocialLoginDTO req)
        {
            DateTime?expires = null;

            if (req.Expires.HasValue)
            {
                expires = DateTime.UtcNow.AddSeconds(req.Expires.Value);
            }

            //유저 확인해서 없으면 추가
            var user = await _userManager.FindByLoginAsync(
                req.Provider,
                req.ProviderKey);

            if (user == null)
            {
                try
                {
                    user = await _accountService.Register(
                        req,
                        provider : req.Provider);
                }
                catch (Exception ex)
                {
                    return(BadRequest(ex.Message));
                }
            }

            var roles = await _userManager.GetRolesAsync(user);

            var roleClaims = GetRoleClaims(roles);
            //토큰 생성
            var resultExpires =
                _tokenService.GenerateToken(
                    user.Id,
                    user.Email,
                    user.UserName,
                    roleClaims,
                    expires);

            if (!expires.HasValue)
            {
                expires = resultExpires;
            }

            //토큰 리턴
            return(Ok(new
            {
                Provider = req.Provider,
                Id = user.Id,
                Email = user.Email,
                Name = user.UserName,
                PhotoUrl = req.PhotoUrl,
                Roles = roles,
                Expires = expires
            }));
        }
        public async Task <ActionResult> CheckSocialLogin(SocialLoginDTO req)
        {
            //유저 확인해서 없으면 추가
            var user = await _userManager.FindByLoginAsync(
                req.Provider,
                req.ProviderKey);

            return(Ok(new
            {
                Exist = user != null
            }));
        }
        /// <summary>
        /// 소셜 로그인으로 사용자 등록
        /// </summary>
        /// <param name="req">사용자 등록 정보</param>
        /// <param name="provider">소셜 로그인 제공자</param>
        /// <returns>등록된 사용자 정보</returns>
        public async Task <User> Register(
            SocialLoginDTO req,
            string provider = null)
        {
            var user = new User
            {
                Email = req.Email,
            };

            user.UserName       = req.Name;
            user.SecurityStamp  = Guid.NewGuid().ToString();
            user.EmailConfirmed = true;

            return(await Register(
                       user,
                       provider : provider,
                       providerKey : req.ProviderKey));
        }
        public async Task <HttpResponseMessage> ExternalLoginAsync(SocialLoginDTO userData)
        {
            var userStore    = new UserStore <ApplicationUser>(new ApplicationDbContext());
            var manager      = new UserManager <ApplicationUser>(userStore);
            var existingUser = manager.FindByEmail(userData.Email);

            if (existingUser == null)
            {
                var user = new ApplicationUser();
                user.UserName       = (userData.Email).Split('@')[0];
                user.FirstName      = userData.FirstName;
                user.LastName       = userData.LastName;
                user.Email          = userData.Email;
                user.EmailConfirmed = true;
                user.CityID         = userData.CityId;
                IdentityResult result = manager.Create(user);
                if (result.Succeeded)
                {
                    manager.AddToRole(user.Id, "NormalUser");
                    var userLoginInfo = new UserLoginInfo(userData.Provider, userData.Id);
                    manager.AddLogin(user.Id, userLoginInfo);
                    List <string> rolename = manager.GetRoles(user.Id).ToList();
                    return(HTTPBusinessLogic.SetHttpResponse(HttpStatusCode.OK, rolename));
                }
                return(HTTPBusinessLogic.SetHttpResponse(HttpStatusCode.BadRequest, "Failed"));
            }
            else
            {
                var userLogIn = manager.Find(new UserLoginInfo(userData.Provider, userData.Id));
                if (userLogIn != null)
                {
                    List <string> rolename = manager.GetRoles(userLogIn.Id).ToList();
                    return(HTTPBusinessLogic.SetHttpResponse(HttpStatusCode.OK, rolename));
                }
                else
                {
                    return(HTTPBusinessLogic.SetHttpResponse(HttpStatusCode.BadRequest, "login Failed"));
                }
            }
        }