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 }));
        }
Esempio n. 3
0
        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 }));
        }
Esempio n. 4
0
        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 }));
        }
Esempio n. 7
0
        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"));
        }
Esempio n. 8
0
 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);
 }
Esempio n. 9
0
        // 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();
            }
        }
Esempio n. 10
0
        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"));
        }
Esempio n. 11
0
        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);
        }
Esempio n. 12
0
 public bool DeleteAccount(string providerName, string providerUserId)
 {
     return(OAuthWebSecurity.DeleteAccount(providerName, providerUserId));
 }