IdentityASP.NET Coreでメールによる認証機能の追加
どうも。てちこまです。
今回は前回のWebAppで実装されなかったメールでの認証機能(アカウントの有効化)を追加します。
公式にある通りSendGridを利用して実装します。
またログインそのものは実装済みであることを前提に進めます。
Index
環境
Windows 10
Visual Studio 2019
ASP.NETCore 3.1
Entity FrameworkCore
IdentityASP.NET Core
1. SendGridにアカウント登録
このリンクSendGridからfreeプランで登録しましょう。
無料でも月に12000件送信できるみたいです。
※本登録完了から実際に利用できるまで利用目的の審査のため時間(翌営業日程度)がかかります。
2. SendGridのアカウントを取得するクラスとIEmailSenderを実装します
以下の通りServicesフォルダを作成しEmailSender.csとAuthMessageSenderOptions.csを追加しましょう。
AuthMessageSenderOptions.cs
1 2 3 4 5 6 7 |
public class AuthMessageSenderOptions { public string SendGridUser { get; set; } public string SendGridKey { get; set; } } |
EmailSender.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
public class EmailSender : IEmailSender { public EmailSender(IOptions<AuthMessageSenderOptions> optionsAccessor) { Options = optionsAccessor.Value; } public AuthMessageSenderOptions Options { get; } //set only via Secret Manager public Task SendEmailAsync(string email, string subject, string message) { return Execute(Options.SendGridKey, subject, message, email); } public Task Execute(string apiKey, string subject, string message, string email) { var client = new SendGridClient(apiKey); var msg = new SendGridMessage() { //YourEmailに送信元にしたいメールアドレスを設定する From = new EmailAddress("YourEmail", Options.SendGridUser), Subject = subject, PlainTextContent = message, HtmlContent = message }; msg.AddTo(new EmailAddress(email)); // Disable click tracking. // See https://sendgrid.com/docs/User_Guide/Settings/tracking.html msg.SetClickTracking(false, false); return client.SendEmailAsync(msg); } } |
※Executeメソッド内のYourEmailは自分のものに変更してください。
3. 「SendGrid」NuGetパッケージをいれる
パッケージコンソールで以下のコマンドを打つかパッケージマネージャからSendGridを導入しましょう。
Install-Package SendGrid
4. SendGridのIDとパスワードをsecretに登録
WebAppのプロジェクト階層で以下のコマンド叩きましょう。
1 2 |
dotnet user-secrets set SendGridUser ユーザ名 dotnet user-secrets set SendGridKey <ApiKeyをいれる> |
- ユーザ名の確認方法
SendGridから届いた「SendGridにようこそ」のメールで確認できます。
2.APIkeyの確認方法
デフォルトでは存在しないのでSendGridで作成する必要があります。
上記のユーザ名とアカウント登録時に設定したパスワードでSendGridにログインしこちらのURLもしくはメニューの Settings>ApiKeys からAPIkeyを作成してください。
※黒塗り部分がAPIkeyです
作成すると一度だけAPIkeyが表示されますのでそれを上記コマンドで使用します。
5.Startup.csにEmail認証の設定を追加
ConfigureServicesに以下のコードを追記します。
Startup.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
.... { public class Startup { ... public void ConfigureServices(IServiceCollection services) { ... //EmailAuth services.AddTransient<IEmailSender, EmailSender>(); services.Configure<AuthMessageSenderOptions>(Configuration); ... |
6. 実装完了
実際に実在するメールアドレスでユーザ登録などを行ってみましょう。
デフォルトではメールによるアカウント認証はダミーリンクでしたが実在するメールアドレス宛に確認リンクが届くはずです。
これを踏まない限りアカウントは有効化されません。
まとめ
ほとんど機械的にメール認証まで実装できるのは純粋にすごいです。
このままだとメールの本文があり得ないぐらい簡素なのでそこは各々で調整しましょう。
加えて外部アカウントでのログインや紐づけも一瞬でできます。
次回の.netの記事でそちらも実装します。