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システムがパスワードハッシュをチェックしているところに到達する前です。私がこの作業を行うことができれば、その変更はユーザーにとって完全に透過的になります。 –