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 }));
        }
Ejemplo n.º 2
0
 public int GetUserId(string userName)
 {
     return(_webSecurity.GetUserId(userName));
 }