AspNetUser 테이블 대신 학생 테이블을 사용하도록 Asp.Net Core를 사용자 정의했습니다. 새로운 학생들에게는 모든 것이 잘 작동합니다. 그러나 기존 학생의 비밀번호를 업데이트해야합니다. 이 일회성으로 학생 로그인 또는 할 수있을 때 나는Asp.Net 핵심 ID, 기존 일반 텍스트 암호를 업데이트
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Login(LoginViewModel model, string returnUrl = null)
{
ViewData["ReturnUrl"] = returnUrl;
if (ModelState.IsValid)
{
// Require the user to have a confirmed email before they can log on.
var user = await _userManager.FindByEmailAsync(model.Email);
if (user != null)
{
if (user.PasswordHash == null)
{
user.EmailConfirmed = true;
user.UserName = model.Email;
user.NormalizedEmail = model.Email.ToUpper();
user.NormalizedUserName = user.NormalizedEmail;
//user.PasswordHash = ?;
//user.SecurityStamp = ?;
//update user in database.
}
//continue on with login process
}
}
}
합니다 (Register
방법에서) 아래의 코드는 새 사용자를 생성 ... (AccountController
Login
방법) 같은 것을 할 싶습니다 그를 데이터베이스에 추가합니다. 이것은 우리가 원하는 것이 아닙니다.
var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
var result = await _userManager.CreateAsync(user, model.Password);
if (result.Succeeded)
// …
암호 해시가 'null'일 때 사용자가 어떻게 로그인해야합니까? 사용자가 사용하는 비밀번호는 무엇이며, 실제 사용자인지 어떻게 확인합니까? – poke
비밀번호를 변경해야하는 모든 사용자를 잠그고 "잊어 버린 비밀번호"링크를 사용하여 새 비밀번호를 요청해야한다고 설명하는 이유는 무엇입니까? 그렇게하면 Identity는 사용자가 자신의 암호를 올바르게 설정하는 데 사용할 수있는 암호 재설정 토큰을 생성합니다. – poke
학생들은 평문 암호로 로그인하게됩니다. 전자 메일과 암호가 일치하면 적어도 과거에 있었던 수준의 권한이 부여 된 사용자라는 것을 알고 있습니다. -이 코드는 Identity 시스템이 암호 해시를 확인하는 시점에 도달하기 전에 나타납니다. 이 작업을 수행 할 수 있다면 변경 사항은 사용자에게 완전히 투명하게 전달됩니다. –