2017-10-19 4 views
0

Ich erstelle eine App mit Identity 2.0, in der Admin andere Benutzer verbieten kann. Wenn sie sie verbieten, werden sie abgemeldet (wenn sie ihre nächste Aktion/Anfrage machen).ASP.NET MVC Meldung anzeigen, wenn Benutzer abgemeldet ist

Hier ist mein Verbot Aktion:

public async Task<ActionResult> Block(ApplicationUser formuser, string id) 
    { 
     if (id == null) 
     { 
      return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 
     } 
     var user = await UserManager.FindByIdAsync(id); 
     user.DeleteDate = DateTime.Now; 
     user.IsConfirmed = false; 
     await UserManager.UpdateSecurityStampAsync(user.Id); 
     return RedirectToAction("Index"); 
    } 

Die UpdateSecuritStampAsync macht das ausloggen Teil. Außerdem finde ich es gut, wenn ich Startup.Auth.cs UseCookieAuthentication einfüge, weil ich dort eine Sache geändert habe, damit der Benutzer abgemeldet wird (wenn ich etwas Wichtiges vermisse, schreibe in die Kommentare, füge ich es hinzu)

 app.UseCookieAuthentication(new CookieAuthenticationOptions 
     { 
      AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
      LoginPath = new PathString("/Account/Login"), 
      Provider = new CookieAuthenticationProvider 
      { 
       // Enables the application to validate the security stamp when the user logs in. 
       // This is a security feature which is used when you change a password or add an external login to your account. 
       OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
        validateInterval: TimeSpan.FromMinutes(0), 
        regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)) 
      } 
     }); 

Ich habe die Standard TimeSpan von 30 Minuten auf 0 geändert (das könnte ein Fehler sein, aber es funktioniert). Die Hauptfrage dieses Threads ist, dass ich etwas erstellen möchte, wo es eine Nachricht anzeigen würde, wenn der Benutzer ausgeloggt ist. Wie soll ich das machen? (Wenn der Benutzer den Benutzer blockiert, erhält der Benutzer nach dem erneuten Laden seiner Seite eine Nachricht, dass er für schlechte Verwendung oder etwas blockiert wurde)

Antwort

1

Verwenden Sie besser Sperren/Entsperren des Benutzers, anstatt den Sicherheitsstempel zu aktualisieren. Werfen Sie einen Blick auf How to lock and unlock account in Asp.Net Identity provider.

public virtual async Task<IdentityResult> LockUserAccount(string userId, int? forDays) 
{ 
    var result = await this.SetLockoutEnabledAsync(userId, true); 
    if (result.Succeeded) 
    { 
     if (forDays.HasValue) 
     { 
      result = await SetLockoutEndDateAsync(userId, DateTimeOffset.UtcNow.AddDays(forDays.Value)); 
     } 
     else 
     { 
      result = await SetLockoutEndDateAsync(userId, DateTimeOffset.MaxValue); 
     } 
    } 
    return result; 
} 

public virtual async Task<IdentityResult> UnlockUserAccount(string userId) 
{ 
    var result = await this.SetLockoutEnabledAsync(userId, false); 
    if (result.Succeeded) 
    { 
     await ResetAccessFailedCountAsync(userId); 
    } 
    return result; 
} 

Und auf Ihre Login-Aktion oder Anbieter würden Sie verwenden

if (userManager.IsLockedOut(userId)) 
{ 
    context.SetError("invalid_grant", "The account is locked out of the system."); 
    return; 
} 

Ich bin nicht sicher, wie der Benutzer unverzüglich nach, ohne ihn lockedout sein/ihr Versuch, da du dich einloggen don‘ t die ID oder den Benutzernamen des Benutzers, wenn er/sie zur Anmeldeseite weitergeleitet wird. Aber wenn Sie das tun, können Sie einfach die Methode IsLockedOut verwenden, um zu entscheiden, ob Sie ein Pop-up-Fenster einblenden sollen, das besagt, was Sie dem Benutzer sagen möchten.

+0

aber diese Methode sperrt sie für ein paar Tage aus, während meine Methode blockiert, bis jemand sie freigibt (weil Sie nicht wirklich wissen, wie lange es dauern wird). Gibt es ein Problem damit, dass du es so machst? – HighSepton

+0

Sie können jemanden auf unbestimmte Zeit sperren und dann entsperren, wann immer Sie möchten. Beachten Sie, dass "forDays" nullfähig ist. Es ist bereits eingebaut, daher würde ich es bevorzugen, wenn Sie nicht versuchen, das Rad neu zu erfinden. –

+0

Okay, nun, ich werde versuchen, es zu ändern. Aber das beantwortet meine Frage nicht wirklich, da ich gefragt habe, wie ich der ausgesperrten Person zeige, dass er ausgesperrt ist. Danke für den Vorschlag, obwohl – HighSepton

Verwandte Themen