2016-04-01 10 views
3

ユーザーがAspNetCoreで電子メールを変更する方法を実装しようとしています。そのため、アカウント管理画面でGenerateChangeEmailTokenAsyncを呼び出す変更管理機能があります。 TokenとUserIdを含むリンク。AspNet Core電子メールアドレスの生成と変更

私の問題は、ChangeEmailAsyncで新しいメールアドレスを入力する必要があるため、リンク先のメールアドレスを新しいアドレスに変更する方法です。

この機能を実装する最良の方法は何ですか?私は、電子メールリンクの新しい電子メールアドレスを送信したくないだけでなく、電子メールをもう一度入力するようにしたくありません。うまくいけば、誰かがこれをやった、私はどこでもそれを見つけることができません、そしてそれは非常に簡単にする必要があります。

答えて

1

通常の流れは、ユーザーがいつものようにプロフィールを更新できるようにすることです。

ユーザーがメールアドレスを更新した場合は、その新しいメールアドレスを確認する必要があります。

つまり、トークンをGenerateChangeEmailTokenAsyncで生成するとします。

あなたは、そのトークンを新しいメールアドレスへのリンクとして送信します。

ユーザーが新しいメールのリンクをクリックすると、サイトに戻って自動的にトークンを確認し、新しいメールアドレスを確認します。

+0

はい、これは私が紛失している部分ですが、新しい電子メールアドレスを確認する方法です。新しいアドレスはどこにも保存されていないので、トークンを含むリンクをクリックするとアプリケーションは何もわかりません新しいアドレスです。そのメールアドレスはどのように取得すればよいですか? –

+0

アカウントには電子メールのフィールド/カラムが必要です。これは、アカウントの登録/作成時に電子メールアドレスを保存した場所です。それから私は上記のように。彼らがアカウントを更新し、電子メールアドレスが変更された場合、電子メールの確認プロセスを進めます。 – Nkosi

+0

電子メールの列は、電子メールのリンクをクリックするまで変更されません。これにより、新しい電子メールを確認するのを待っている間にアカウントから孤立していないことが保証されます。これは、新しい電子メールがDB内のどこにも格納されていないことを意味します。私は未確認の電子メールの新しい列を追加するのが最善の方法だと考えています。そして、リンクをクリックすると、それを引っ張ります。 –

3

私はこれに遅れていることは知っていますが、私はそれ以前に自分自身で探していました。

GenerateChangeEmailTokenAsyncメソッドは、新しい電子メールをトークンのハッシュの一部として受け取ります。 次はあなたが電子メールでユーザーにこのリンクを送信トークンが含まれているリンク、新しい電子メールや古いメール

var token = await _userManager.GenerateChangeEmailTokenAsync(user, model.NewEmail); 
var resetLink = Url.Action("ChangeEmailToken", "account", new {token = token, oldEmail = user.Email, newEmail = model.newEmail }, protocol: HttpContext.Request.Scheme); 

次を作成します。

クリックすると、ユーザーはAccountController上(ここでは「ChangeEmailToken」リンクで指定された方法を打つ:

[AllowAnonymous] 
[HttpGet] 
public async Task<IActionResult> ChangeEmailToken([FromQuery] string token, [FromQuery] string oldEmail, [FromQuery] string newEmail) 

次あなたはトークンを検証する必要がある、と-ifはメールアドレスをアップデートsuccesful-

var result = await _userManager.ChangeEmailAsync(user, newEmail, token); 
+0

手動での確認と更新の代わりに、 '_userManager.ChangeEmailAsync(user、newEmail、token)'を使うだけです。 –

+0

ありがとうアクセル、私はそれを見ていない。サンプルを更新しました –

関連する問題