public ActionResult Disassociate(string provider, string providerUserId) { string ownerAccount = OAuthWebSecurity.GetUserName(provider, providerUserId); ManageMessageId?message = null; // 현재 로그인한 사용자가 소유자인 경우에만 계정 연결 해제 if (ownerAccount == User.Identity.Name) { // 트랜잭션을 사용하여 사용자가 마지막 로그인 자격 증명을 삭제하지 못하도록 함 using (var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = IsolationLevel.Serializable })) { bool hasLocalAccount = OAuthWebSecurity.HasLocalAccount(WebSecurity.GetUserId(User.Identity.Name)); if (hasLocalAccount || OAuthWebSecurity.GetAccountsFromUserName(User.Identity.Name).Count > 1) { OAuthWebSecurity.DeleteAccount(provider, providerUserId); scope.Complete(); message = ManageMessageId.RemoveLoginSuccess; } } } return(RedirectToAction("Manage", new { Message = message })); }
public ActionResult Disassociate(string provider, string providerUserId) { string ownerAccount = OAuthWebSecurity.GetUserName(provider, providerUserId); ManageMessageId?message = null; // Only disassociate the account if the currently logged in user is the owner if (ownerAccount == User.Identity.Name) { // Use a transaction to prevent the user from deleting their last login credential using (var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = IsolationLevel.Serializable })) { bool hasLocalAccount = OAuthWebSecurity.HasLocalAccount(WebSecurity.GetUserId(User.Identity.Name)); if (hasLocalAccount || OAuthWebSecurity.GetAccountsFromUserName(User.Identity.Name).Count > 1) { OAuthWebSecurity.DeleteAccount(provider, providerUserId); scope.Complete(); message = ManageMessageId.RemoveLoginSuccess; } } } return(RedirectToAction("Manage", new { Message = message })); }
public ActionResult Disassociate(string provider, string providerUserId) { string ownerAccount = OAuthWebSecurity.GetUserName(provider, providerUserId); ManageMessageId?message = null; // Desasociar la cuenta solo si el usuario que ha iniciado sesión es el propietario if (ownerAccount == User.Identity.Name) { // Usar una transacción para evitar que el usuario elimine su última credencial de inicio de sesión using (var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = IsolationLevel.Serializable })) { bool hasLocalAccount = OAuthWebSecurity.HasLocalAccount(WebSecurity.GetUserId(User.Identity.Name)); if (hasLocalAccount || OAuthWebSecurity.GetAccountsFromUserName(User.Identity.Name).Count > 1) { OAuthWebSecurity.DeleteAccount(provider, providerUserId); scope.Complete(); message = ManageMessageId.RemoveLoginSuccess; } } } return(RedirectToAction("Manage", new { Message = message })); }
public ActionResult Disassociate(string provider, string providerUserId) { string ownerAccount = OAuthWebSecurity.GetUserName(provider, providerUserId); ManageMessageId?message = null; // Удалять связь учетной записи, только если текущий пользователь — ее владелец if (ownerAccount == User.Identity.Name) { // Транзакция используется, чтобы помешать пользователю удалить учетные данные последнего входа using (var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = System.Transactions.IsolationLevel.Serializable })) { bool hasLocalAccount = OAuthWebSecurity.HasLocalAccount(WebSecurity.GetUserId(User.Identity.Name)); if (hasLocalAccount || OAuthWebSecurity.GetAccountsFromUserName(User.Identity.Name).Count > 1) { OAuthWebSecurity.DeleteAccount(provider, providerUserId); scope.Complete(); message = ManageMessageId.RemoveLoginSuccess; } } } return(RedirectToAction("Manage", new { Message = message })); }
public ActionResult Disassociate(string provider, string providerUserId) { string ownerAccount = OAuthWebSecurity.GetUserName(provider, providerUserId); ManageMessageId?message = null; // 只有在当前登录用户是所有者时才取消关联帐户 if (ownerAccount == User.Identity.Name) { // 使用事务来防止用户删除其上次使用的登录凭据 using (var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = IsolationLevel.Serializable })) { bool hasLocalAccount = OAuthWebSecurity.HasLocalAccount(WebSecurity.GetUserId(User.Identity.Name)); if (hasLocalAccount || OAuthWebSecurity.GetAccountsFromUserName(User.Identity.Name).Count > 1) { OAuthWebSecurity.DeleteAccount(provider, providerUserId); scope.Complete(); message = ManageMessageId.RemoveLoginSuccess; } } } return(RedirectToAction("Manage", new { Message = message })); }
public ActionResult Disassociate(string provider, string providerUserId) { string ownerAccount = OAuthWebSecurity.GetUserName(provider, providerUserId); ManageMessageId?message = null; // Dissocier uniquement le compte si l'utilisateur actuellement connecté est le propriétaire if (ownerAccount == User.Identity.Name) { // Utiliser une transaction pour empêcher l'utilisateur de supprimer ses dernières informations d'identification de connexion using (var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = IsolationLevel.Serializable })) { bool hasLocalAccount = OAuthWebSecurity.HasLocalAccount(WebSecurity.GetUserId(User.Identity.Name)); if (hasLocalAccount || OAuthWebSecurity.GetAccountsFromUserName(User.Identity.Name).Count > 1) { OAuthWebSecurity.DeleteAccount(provider, providerUserId); scope.Complete(); message = ManageMessageId.RemoveLoginSuccess; } } } return(RedirectToAction("Manage", new { Message = message })); }
public ActionResult UnlinkLogin_Post(string provider) { using (var context = dataContextFactory.Create()) { var model = LinkAccountModel.ForUser(context, User.Identity); if (!model.AllowRemovingLogin) { Flash.Error( "The login could not be unlinked because it is the last login available for this account."); } else { var providerAccount = OAuthWebSecurity.GetAccountsFromUserName(User.Identity.Name) .Single(a => a.Provider.ToLower() == provider.ToLower()); if (OAuthWebSecurity.DeleteAccount(providerAccount.Provider, providerAccount.ProviderUserId)) { Flash.Success("Your " + provider + " login has been unlinked"); } else { Flash.Error("The account could not be unlinked."); } } } return(RedirectToAction("LinkAccount")); }
public ManageMessageId?Dissassociate(string ownerAccount, string provider, string providerUserId) { // Use a transaction to prevent the user from deleting their last login credential using (var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = IsolationLevel.Serializable })) { bool hasLocalAccount = OAuthWebSecurity.HasLocalAccount(WebSecurity.GetUserId(ownerAccount)); if (hasLocalAccount || OAuthWebSecurity.GetAccountsFromUserName(ownerAccount).Count > 1) { OAuthWebSecurity.DeleteAccount(provider, providerUserId); scope.Complete(); return(ManageMessageId.RemoveLoginSuccess); } } return(null); }
// deletes user from user table and membership tables. public static void DeleteUser(User user) { var simpleRoles = (SimpleRoleProvider)Roles.Provider; var simpleMembership = (SimpleMembershipProvider)Membership.Provider; List <string> roles = new List <string>(); if (simpleRoles.IsUserInRole(user.Email, "Admin")) { roles.Add("Admin"); } if (simpleRoles.IsUserInRole(user.Email, "Member")) { roles.Add("Member"); } // possible OAuth account var oAuths = OAuthWebSecurity.GetAccountsFromUserName(user.Email); var oAuth = oAuths.Count > 0 ? oAuths.ToList()[0] : null; // ** Unit of Work Pattern using (var uow = new UnitOfWorkDistributed()) { simpleRoles.RemoveUsersFromRoles(new string[] { user.Email }, roles.ToArray()); if (oAuth != null) { OAuthWebSecurity.DeleteAccount(oAuth.Provider, oAuth.ProviderUserId); } else { simpleMembership.DeleteAccount(user.Email); } simpleMembership.DeleteUser(user.Email, false); uow.Complete(); } }
public HttpResponseMessage Disassociate(DissasociateModel model) { string ownerAccount = OAuthWebSecurity.GetUserName(model.Provider, model.ProviderUserId); // Disassociate account if authenticated user is the owner if (ownerAccount == User.Identity.Name) { // Using transaction to avoid dissasociation of the last linked account using (var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = IsolationLevel.Serializable })) { bool hasLocalAccount = OAuthWebSecurity.HasLocalAccount(WebSecurity.GetUserId(User.Identity.Name)); if (hasLocalAccount || OAuthWebSecurity.GetAccountsFromUserName(User.Identity.Name).Count > 1) { OAuthWebSecurity.DeleteAccount(model.Provider, model.ProviderUserId); scope.Complete(); } } return(Request.CreateResponse(HttpStatusCode.OK, "Account succesfully dissasociated")); } throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.BadRequest, "You are not the account owner")); }
public bool Disassociate(string provider, string providerUserId) { bool success = false; string ownerAccount = OAuthWebSecurity.GetUserName(provider, providerUserId); // Only disassociate the account if the currently logged in user is the owner if (ownerAccount == CurrentUser.Identity.Name) { // Use a transaction to prevent the user from deleting their last login credential using (var scope = new System.Transactions.TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = IsolationLevel.Serializable })) { bool hasLocalAccount = OAuthWebSecurity.HasLocalAccount(WebSecurity.GetUserId(CurrentUser.Identity.Name)); if (hasLocalAccount || OAuthWebSecurity.GetAccountsFromUserName(CurrentUser.Identity.Name).Count > 1) { OAuthWebSecurity.DeleteAccount(provider, providerUserId); scope.Complete(); success = true; } } } return(success); }
public bool DeleteAccount(string providerName, string providerUserId) { return(OAuthWebSecurity.DeleteAccount(providerName, providerUserId)); }