2017-03-24 5 views
0

Ich verwende die Standardvorlage für individuelle Benutzerkonten in Visual Studio 2017 asp.net-Kern mit meinen eigenen benutzerdefinierten Benutzertabellen. Benutzertabelle hat ein Passwort und LoginModel hat ein Passwort. Ich habe folgende worden auf https://docs.microsoft.com/en-us/aspnet/core/security/authentication/cookie zusammen, für die Anmeldung in der AccountCookie-Authentifizierung ohne Identitätskennwort

[HttpPost] 
    [AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public virtual async Task<IActionResult> Login(LoginModel model, 
     string returnUrl) 
    { 
     if (ModelState.IsValid) 
     { 
      var user = _context.Users.FirstOrDefault(u => u.Email == model.Email); 
      var claims = new List<Claim> 
      { 
       new Claim(ClaimTypes.Email, user.Email) 
      }; 
      var identity = new ClaimsIdentity(claims); 
      var principal = new ClaimsPrincipal(identity); 
      await _httpContext.Authentication.SignInAsync 
       (CookieAuthenticationDefaults.AuthenticationScheme, 
       principal, new AuthenticationProperties 
       { 
        IsPersistent = model.RememberMe, 
        ExpiresUtc = DateTime.UtcNow.AddYears(1) 
       }); 
      return RedirectToRoute("HomePage"); 
     } 
     return View(model); 
    } 

Wenn ich den Code ausführen, E-Mail wird einen Fehler werfen, wenn ich in falschen setzen, aber ich kann, was Passwort gesetzt ich will und es werde erfolgreich sein. Wie würde ich das Passwort eingeben, um sicherzustellen, dass es das richtige Passwort ist?

Antwort

0

Das Passwort oder eine Hash-Version davon sollte an die Login-Controller-Aktion des Servers (über einen sicheren HTTPS-Kanal) übergeben werden, und dann liegt es an Ihnen, diese gegen Ihre Datenbank, AD oder ein anderes System zu validieren macht das SignInAsync. Ein Dummy-Beispiel mit fest codiertem Passwort wäre:

[HttpPost("login")] 
[AllowAnonymous] 
public async Task<ContentResult> Login(string username, string password) 
{ 
    if(username!="ADMIN" || password!="123") 
     return new ContentResult { Content = "" }; 

    ClaimsPrincipal principal = new ClaimsPrincipal(new ClaimsIdentity(
     new List<Claim>{ 
      new Claim(ClaimTypes.Name, username) 
     }, 
     "cookies/ADMIN")); 

    await HttpContext.Authentication.SignInAsync(AdminAuthSchemeName, principal); 

    return new ContentResult { Content = username }; 
} 
Verwandte Themen