2012-09-11 5 views
13

In meiner Anwendung verwende ich die Formularauthentifizierung zum Anmelden und Abmelden von Benutzern.Wie erzwinge Logout-Benutzer, wenn sein/ihr Benutzername von einem anderen Benutzer geändert wird?

Eine Funktionalität ist Admin kann den Benutzernamen anderer Benutzer ändern. In diesem Fall muss ich den Benutzer abmelden, dessen Benutzername geändert wurde.

Wenn ich nicht, aufgrund ihrer Cookies zuvor, erhalten sie Zugriff auf die Anwendung und erhalten Fehlermeldungen (da ihren Benutzernamen nicht existiert und es gibt Teile, wo ich ihren Benutzernamen für einige Funktionen verwenden).

Wie kann ich diese Benutzer zwingen, sich mit Formularauthentifizierung abzumelden?

UPDATE:

public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     string controller = filterContext.RouteData.Values["controller"].ToString(); 
     string action  = filterContext.RouteData.Values["action"].ToString(); ; 
     // Below returns the previous username, which does not exist anymore in db. 
     string userName = HttpContext.Current.User.Identity.Name; 

     UnitOfWork unitOfWork = new UnitOfWork(); 

     if (!unitOfWork.UserRepository.UserExists(userName)) 
     { 
      FormsAuthentication.SignOut(); 
      filterContext.HttpContext.Session.Clear(); 
      filterContext.HttpContext.Session.Abandon(); 
      // I am not using Roles. 


     } 
     unitOfWork.Dispose(); 
     base.OnActionExecuting(filterContext); 

    } 

In meinem Kunden globale Filter, überprüfe ich, ob Benutzer existiert oder nicht, wenn nicht ich sie abzumelden. Es funktioniert jedoch nicht. Mit der Arbeit meine ich, dass sie die Authentifizierung bestehen und Zugang zur Anwendung erhalten.

Vielen Dank im Voraus.

Antwort

9

Hier ist, was Sie tun, Benutzer zu zwingen, abzumelden:

public void UserPasswordChangedHandler() 
{ 
    FormsAuthentication.SignOut(); 
    Roles.DeleteCookie(); 
    Session.Clear(); 
} 

Ich glaube nicht Zeile für Zeile Erklärung erforderlich, erklärend seiner selbst genug. Bitte lassen Sie mich wissen, wenn ich mich irre.

aktualisiert

einfache Antwort auf Ihre weitere Frage ist pro Benutzer boolean Tracking zu halten, wenn seine Daten von admin und wenn ja aktualisiert wurden - nur umleiten ihn zur Login-Seite.

Bitte siehe Artikel folgende für Zwangsabmeldeformulare Authentifizierungsinformationen verwenden:

Update 2

Clearing-Cookies

Hoffnung diese Ihnen helfen.

+2

Ich denke, das meldet den angemeldeten Benutzer ab. Ich möchte andere Benutzer abmelden, deren Passwort von admin geändert wurde. Nun, ich kann diesen Code natürlich verwenden, um diesen Benutzer zu signieren, aber wie kann ich das Passwort ändern? Mit anderen Worten, wenn diese Methode aufgerufen werden soll? –

+0

Froh, dass der Code, den ich zur Verfügung stellte, hilfreich war. Um Ihre zusätzliche Frage zu beantworten, lesen Sie bitte das Update in meiner Antwort. –

+0

Nochmals vielen Dank. Ich verwende Ihren Code in meinem benutzerdefinierten ActionFilterAttribute-Filter. Dort überprüfe ich, ob der Benutzername existiert oder nicht, wenn dies nicht der Fall ist (diese Bedingung ist erfüllt, wenn ich meinen eigenen Benutzernamen ändere), unterzeichne ich den Benutzer. Das Problem besteht jedoch weiterhin. Der Cookie des Nutzers bleibt und er erhält Zugriff auf die Anwendung. Irgendwelche Ideen ? Ich habe meine Frage mit Filtercode aktualisiert. –

2

Wenn ein Benutzer ungültig werden muss, müssen Sie seine Details zu einer Art interner statischer Liste hinzufügen.

Dann auf jeder Seite Anfrage (möglicherweise mit Application_BeginRequest) sehen, ob dieser aktuelle Benutzer in dieser Liste ist, und wenn ja FormsAuthentication.SignOut there-and-then.

Es scheint ein bisschen wie ein Hack, aber es ist das Beste, was ich gerade denken kann.

Beachten Sie, dass das Entfernen eines Sitzungsstatus eines Benutzers in Abwesenheit der gesamte Vorgang ist.

+0

wir machen eine ähnliche Sache, um mehrere Benutzer von verschiedenen Maschinen anzumelden, generieren wir ein Token (basierend auf den PC-Informationen des Benutzers) für jede Anmeldung und dann überprüfen, ob das Token das gleiche ist, wenn wir nicht ein Signal erzwingen –

Verwandte Themen