2017-03-24 18 views
0

私は独自のカスタムユーザーテーブルを持つVisual Studio 2017 asp.netコアのデフォルトの個別ユーザーアカウントテンプレートを使用しています。ユーザーテーブルにはパスワードがあり、LoginModelにはパスワードがあります。私は、ログインのために、https://docs.microsoft.com/en-us/aspnet/core/security/authentication/cookieに沿って、次のしてきたAccountControllerアイデンティティパスワードを使用しないCookie認証

[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); 
    } 

私は、コードを実行すると、私は間違ったものに入れた場合、メールがエラーをスローしますが、私はそれを私が好きなパスワード置くことができます成功するでしょう。それが正しいパスワードであることを確認するために、パスワードをどのように取り込むのですか?

答えて

0

パスワードまたはハッシュされたバージョンは、サーバーへのログインコントローラの操作(セキュアなHTTPSチャネル経由)に渡す必要があります。その後、データベース、ADまたはそれ以前のシステムで検証しますSignInAsyncを実行します。ハードコードされたパスワードの仮の例は、

[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 }; 
} 
です。
関連する問題