記事詳細
- 投稿日
- 2025年11月27日06時55分
-
タイトル
-
認証アプリ開発(Visualstudio2022community)本番での登録〜確認メール送信
- 内容
-
ここでは ASP.NET Core MVC + Identity を使って、
「ユーザー登録 → 確認メール送信 → メール内リンククリック後のアカウント有効化」
までを行う、本番運用を意識したサンプル構成 をまとめます。著作権の関係で Visual Studio の自動生成コードをそのまま全文は載せられませんが、
必要なポイントと主要コード例 を組み合わせれば、すぐに動くプロジェクトを作れます。1. プロジェクト作成
- Visual Studio 2022 Community
- 新規プロジェクト → ASP.NET Core Web アプリケーション (Model-View-Controller)
- 認証: 個別ユーザーアカウント を選択
- .NET 6 以上を推奨(LTS)
2. Identity のメール確認を有効化
Program.cs(またはStartup.cs)で設定します。builder.Services.AddDefaultIdentity<IdentityUser>(options => { options.SignIn.RequireConfirmedAccount = true; // メール確認必須 }) .AddEntityFrameworkStores<ApplicationDbContext>();3. メール送信サービスの実装
本番では SendGrid や SMTP を利用します。
例: SMTP(Gmail の場合)public class SmtpEmailSender : IEmailSender { private readonly IConfiguration _config; public SmtpEmailSender(IConfiguration config) => _config = config; public async Task SendEmailAsync(string email, string subject, string htmlMessage) { using var client = new SmtpClient(); client.Host = _config["Smtp:Host"]; client.Port = int.Parse(_config["Smtp:Port"]); client.EnableSsl = true; client.Credentials = new NetworkCredential( _config["Smtp:User"], _config["Smtp:Pass"]); var mail = new MailMessage { From = new MailAddress(_config["Smtp:From"]), Subject = subject, Body = htmlMessage, IsBodyHtml = true }; mail.To.Add(email); await client.SendMailAsync(mail); } }Program.csに登録:builder.Services.AddTransient<IEmailSender, SmtpEmailSender>();appsettings.jsonに設定:"Smtp": { "Host": "smtp.gmail.com", "Port": "587", "User": "youraccount@gmail.com", "Pass": "app-password", "From": "youraccount@gmail.com" }4. 登録時のメール送信処理
Areas/Identity/Pages/Account/Register.cshtml.csのOnPostAsync内で、
ユーザー作成後に確認メールを送信します。var code = await _userManager.GenerateEmailConfirmationTokenAsync(user); code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code)); var callbackUrl = Url.Page( "/Account/ConfirmEmail", pageHandler: null, values: new { userId = user.Id, code }, protocol: Request.Scheme); await _emailSender.SendEmailAsync( Input.Email, "Confirm your email", $"<p>アカウントを有効化するには <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>こちら</a> をクリックしてください。</p>");5. 確認リンククリック後の処理
Areas/Identity/Pages/Account/ConfirmEmail.cshtml.csにて:public async Task<IActionResult> OnGetAsync(string userId, string code) { if (userId == null || code == null) return RedirectToPage("/Index"); var user = await _userManager.FindByIdAsync(userId); if (user == null) return NotFound("ユーザーが見つかりません。"); code = Encoding.UTF8.GetString(WebEncoders.Base64UrlDecode(code)); var result = await _userManager.ConfirmEmailAsync(user, code); return Page(); }6. 本番運用の注意点
- SMTP 認証情報は環境変数や Azure Key Vault で管理
- HTTPS 必須(
app.UseHttpsRedirection()) - メール送信は非同期キュー(Hangfire, Azure Queue)
Powered by Froala Editor
- Visual Studio 2022 Community
-
添付画像
-
画像はありません
- Genreのカテゴリ-名
- Others