public async Task <IHttpActionResult> AddExternalLogin(AddExternalLoginRequest model) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } Authentication.SignOut(DefaultAuthenticationTypes.ExternalCookie); AuthenticationTicket ticket = AccessTokenFormat.Unprotect(model.ExternalAccessToken); if (ticket == null || ticket.Identity == null || (ticket.Properties != null && ticket.Properties.ExpiresUtc.HasValue && ticket.Properties.ExpiresUtc.Value < DateTimeOffset.UtcNow)) { return(BadRequest("External login failure.")); } ExternalLoginData externalData = ExternalLoginData.FromIdentity(ticket.Identity); if (externalData == null) { return(BadRequest("The external login is already associated with an account.")); } IdentityResult result = await UserManager.AddLoginAsync(User.Identity.GetUserId(), new UserLoginInfo(externalData.LoginProvider, externalData.ProviderKey)); if (!result.Succeeded) { return(GetErrorResult(result)); } return(Ok()); }
public async Task <AddExternalLoginResponse> AddExternalLoginAsync(AddExternalLoginRequest request) { if (request.LoginInfo == null) { return(new AddExternalLoginResponse() { Succeded = false, Message = "Login info was not initialize" }); } var result = await _userRepository.AddLoginAsync(request.UserId, request.LoginInfo); return(new AddExternalLoginResponse() { Succeded = result.Succeeded, Message = result.Errors.FirstOrDefault() ?? String.Empty }); }