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")); } } }