계정 확인 및 ASP.NET Core에서 암호 복구Account confirmation and password recovery in ASP.NET Core

참조 이 PDF 파일 ASP.NET Core 1.1 및 2.1 버전에 대 한 합니다.See this PDF file for the ASP.NET Core 1.1 and 2.1 version.

하 여 Rick Anderson하십시오 Ponant, 및 Joe AudetteBy Rick Anderson, Ponant, and Joe Audette

이 자습서에서는 전자 메일 확인 및 암호 재설정을 사용 하 여 ASP.NET Core 앱을 빌드하는 방법을 보여 줍니다.This tutorial shows how to build an ASP.NET Core app with email confirmation and password reset. 이 자습서는 되지 시작 항목입니다.This tutorial is not a beginning topic. 에 대해 잘 알고 있어야 합니다.You should be familiar with:

전제 조건Prerequisites

.NET core 2.2 SDK 이상.NET Core 2.2 SDK or later

웹 앱 만들기 및 Identity를 스 캐 폴드Create a web app and scaffold Identity

인증을 사용 하 여 웹 앱을 만들려면 다음 명령을 실행 합니다.Run the following commands to create a web app with authentication.

dotnet new webapp -au Individual -uld -o WebPWrecover
cd WebPWrecover
dotnet add package Microsoft.VisualStudio.Web.CodeGeneration.Design
dotnet restore
dotnet tool install -g dotnet-aspnet-codegenerator
dotnet aspnet-codegenerator identity -dc WebPWrecover.Data.ApplicationDbContext --files "Account.Register;Account.Login;Account.Logout;Account.ConfirmEmail"
dotnet ef database drop -f
dotnet ef database update
dotnet run

새 사용자 등록 테스트Test new user registration

앱 실행을 선택 합니다 등록 링크를 선택한 사용자를 등록 합니다.Run the app, select the Register link, and register a user. 이 시점에서 전자 메일에만 유효성 검사 된 합니다 [EmailAddress] 특성입니다.At this point, the only validation on the email is with the [EmailAddress] attribute. 등록을 제출 후 앱에 로그인 됩니다.After submitting the registration, you are logged into the app. 자습서의 뒷부분에 나오는 코드에는 전자 메일의 유효성을 검사할 때까지 새 사용자가 로그인 할 수 없습니다 있도록 업데이트 됩니다.Later in the tutorial, the code is updated so new users can't sign in until their email is validated.

Id 데이터베이스 보기View the Identity database

  • 메뉴에서 SQL Server 개체 탐색기 (SSOX).From the View menu, select SQL Server Object Explorer (SSOX).
  • 이동할 (localdb) (SQL Server 13) MSSQLLocalDB합니다.Navigate to (localdb)MSSQLLocalDB(SQL Server 13). 마우스 오른쪽 단추로 클릭 dbo입니다. AspNetUsers > 데이터를 볼:Right-click on dbo.AspNetUsers > View Data:

SQL Server 개체 탐색기에서 AspNetUsers 테이블의 상황에 맞는 메뉴

테이블의 유의 EmailConfirmed 필드는 False합니다.Note the table's EmailConfirmed field is False.

앱에서 확인 전자 메일을 보낼 때 다음 단계에서는이 전자 메일에 다시 사용 하려는.You might want to use this email again in the next step when the app sends a confirmation email. 선택한 행을 마우스 오른쪽 단추로 클릭 삭제합니다.Right-click on the row and select Delete. 전자 메일 별칭을 삭제 하면 쉽게 다음 단계에 있습니다.Deleting the email alias makes it easier in the following steps.

전자 메일 확인이 필요Require email confirmation

새 사용자 등록 전자 메일을 확인 하는 것이 좋습니다.It's a best practice to confirm the email of a new user registration. 다른 사람이 가장 하지는 확인 하려면 확인 하면 전자 메일 (즉, 다른 사용자의 전자 메일을 사용 하 여 등록 하지 않은).Email confirmation helps to verify they're not impersonating someone else (that is, they haven't registered with someone else's email). 토론 포럼을 했으며 방지 하려고 한다고 가정해 보겠습니다 "yli@example.com"등록"에서nolivetto@contoso.com"입니다.Suppose you had a discussion forum, and you wanted to prevent "yli@example.com" from registering as "nolivetto@contoso.com". 전자 메일 확인 하지 않고 "nolivetto@contoso.com" 앱에서 원치 않는 전자 메일을 받을 수 있습니다.Without email confirmation, "nolivetto@contoso.com" could receive unwanted email from your app. 사용자는 실수로로 등록 되어 있다고 가정 "ylo@example.com" 및 "yli"의 오타 눈치채 합니다.Suppose the user accidentally registered as "ylo@example.com" and hadn't noticed the misspelling of "yli". 이러한 앱에 올바른 전자 메일 없기 때문에 암호 복구를 사용 하려면 없게 됩니다.They wouldn't be able to use password recovery because the app doesn't have their correct email. 전자 메일 확인 봇을에서 제한 된 보호를 제공합니다.Email confirmation provides limited protection from bots. 전자 메일 확인 전자 메일 계정의 수를 사용 하 여 악의적인 사용자 로부터 보호를 제공 하지 않습니다.Email confirmation doesn't provide protection from malicious users with many email accounts.

일반적으로 새 사용자가 전자 메일을 확인된 하기 전에 먼저 웹 사이트에 데이터를 게시 하지 못하도록 좋습니다.You generally want to prevent new users from posting any data to your web site before they have a confirmed email.

업데이트 Startup.ConfigureServices 전자 메일을 확인된 해야 합니다.Update Startup.ConfigureServices to require a confirmed email:

public void ConfigureServices(IServiceCollection services)
{

    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(
            Configuration.GetConnectionString("DefaultConnection")));

    services.AddDefaultIdentity<IdentityUser>(config =>
    {
        config.SignIn.RequireConfirmedEmail = true;
    })
        .AddDefaultUI(UIFramework.Bootstrap4)
        .AddEntityFrameworkStores<ApplicationDbContext>();

    // requires
    // using Microsoft.AspNetCore.Identity.UI.Services;
    // using WebPWrecover.Services;
    services.AddTransient<IEmailSender, EmailSender>();
    services.Configure<AuthMessageSenderOptions>(Configuration);

    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}

config.SignIn.RequireConfirmedEmail = true; 등록 된 사용자를가 해당 전자 메일이 확인 될 때까지 로그인 수 없습니다.config.SignIn.RequireConfirmedEmail = true; prevents registered users from logging in until their email is confirmed.

전자 메일 공급자 구성Configure email provider

이 자습서에서는 SendGrid 전자 메일을 보내는 데 사용 됩니다.In this tutorial, SendGrid is used to send email. SendGrid 계정 및 전자 메일을 보내는 키 필요 합니다.You need a SendGrid account and key to send email. 다른 이메일 공급자를 사용할 수 있습니다.You can use other email providers. ASP.NET Core 2.x 포함 System.Net.Mail, 앱에서 전자 메일을 보낼 수 있습니다.ASP.NET Core 2.x includes System.Net.Mail, which allows you to send email from your app. 전자 메일을 보내려면 SendGrid 또는 다른 전자 메일 서비스를 사용 하는 것이 좋습니다.We recommend you use SendGrid or another email service to send email. SMTP를 보호 하 고 올바르게 설정 하기가 어렵습니다.SMTP is difficult to secure and set up correctly.

전자 메일 보안 키를 인출 하는 클래스를 만듭니다.Create a class to fetch the secure email key. 이 샘플을 만들 Services/AuthMessageSenderOptions.cs:For this sample, create Services/AuthMessageSenderOptions.cs:

public class AuthMessageSenderOptions
{
    public string SendGridUser { get; set; }
    public string SendGridKey { get; set; }
}

SendGrid 사용자 암호를 구성 합니다.Configure SendGrid user secrets

설정 합니다 SendGridUser 하 고 SendGridKey 사용 하 여는 암호 관리자 도구합니다.Set the SendGridUser and SendGridKey with the secret-manager tool. 예를 들어:For example:

C:/WebAppl>dotnet user-secrets set SendGridUser RickAndMSFT
info: Successfully saved SendGridUser = RickAndMSFT to the secret store.

Windows, 암호 관리자의 키/값 쌍 저장 하는 secrets.json 파일을 %APPDATA%/Microsoft/UserSecrets/<WebAppName-userSecretsId> 디렉터리입니다.On Windows, Secret Manager stores keys/value pairs in a secrets.json file in the %APPDATA%/Microsoft/UserSecrets/<WebAppName-userSecretsId> directory.

콘텐츠를 secrets.json 파일 암호화 되지 않습니다.The contents of the secrets.json file aren't encrypted. 에서는 다음 태그를 secrets.json 파일입니다.The following markup shows the secrets.json file. SendGridKey 값이 제거 되었습니다.The SendGridKey value has been removed.

{
  "SendGridUser": "RickAndMSFT",
  "SendGridKey": "<key removed>"
}

자세한 내용은 참조는 옵션 패턴구성합니다.For more information, see the Options pattern and configuration.

SendGrid를 설치 합니다.Install SendGrid

이 자습서를 통해 전자 메일 알림을 추가 하는 방법을 보여 줍니다 SendGrid, 하지만 SMTP 및 다른 메커니즘을 사용 하 여 메일을 보낼 수 있습니다.This tutorial shows how to add email notifications through SendGrid, but you can send email using SMTP and other mechanisms.

설치는 SendGrid NuGet 패키지:Install the SendGrid NuGet package:

패키지 관리자 콘솔에서 다음 명령을 입력 합니다.From the Package Manager Console, enter the following command:

Install-Package SendGrid

참조 SendGrid를 사용 하 여 시작 해 보세요 무료 SendGrid 계정을 등록 합니다.See Get Started with SendGrid for Free to register for a free SendGrid account.

IEmailSender 구현Implement IEmailSender

구현 IEmailSender를 만듭니다 Services/EmailSender.cs 다음과 비슷한 코드를 사용 하 여:To Implement IEmailSender, create Services/EmailSender.cs with code similar to the following:

using Microsoft.AspNetCore.Identity.UI.Services;
using Microsoft.Extensions.Options;
using SendGrid;
using SendGrid.Helpers.Mail;
using System.Threading.Tasks;

namespace WebPWrecover.Services
{
    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()
            {
                From = new EmailAddress("Joe@contoso.com", "Joe Smith"),
                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);
        }
    }
}

시작 전자 메일을 지원 하도록 구성Configure startup to support email

다음 코드를 추가 합니다 ConfigureServices 의 메서드를 Startup.cs 파일:Add the following code to the ConfigureServices method in the Startup.cs file:

  • 추가 EmailSender 일시적인 서비스로 합니다.Add EmailSender as a transient service.
  • 등록 된 AuthMessageSenderOptions 구성 인스턴스.Register the AuthMessageSenderOptions configuration instance.
public void ConfigureServices(IServiceCollection services)
{

    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(
            Configuration.GetConnectionString("DefaultConnection")));

    services.AddDefaultIdentity<IdentityUser>(config =>
    {
        config.SignIn.RequireConfirmedEmail = true;
    })
        .AddDefaultUI(UIFramework.Bootstrap4)
        .AddEntityFrameworkStores<ApplicationDbContext>();

    // requires
    // using Microsoft.AspNetCore.Identity.UI.Services;
    // using WebPWrecover.Services;
    services.AddTransient<IEmailSender, EmailSender>();
    services.Configure<AuthMessageSenderOptions>(Configuration);

    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}

계정 확인 및 암호 복구를 사용 하도록 설정Enable account confirmation and password recovery

서식 파일에 계정 확인 및 암호 복구를 위한 코드가 있습니다.The template has the code for account confirmation and password recovery. 찾을 합니다 OnPostAsync 의 메서드 Areas/Identity/Pages/Account/Register.cshtml.cs합니다.Find the OnPostAsync method in Areas/Identity/Pages/Account/Register.cshtml.cs.

다음 줄을 주석으로 자동으로 로그인 되 새로 등록 된 사용자를 방지 합니다.Prevent newly registered users from being automatically signed in by commenting out the following line:

await _signInManager.SignInAsync(user, isPersistent: false);

전체 메서드는 강조 표시 된 변경 된 줄으로 표시 됩니다.The complete method is shown with the changed line highlighted:

public async Task<IActionResult> OnPostAsync(string returnUrl = null)
{
    returnUrl = returnUrl ?? Url.Content("~/");
    if (ModelState.IsValid)
    {
        var user = new IdentityUser { UserName = Input.Email, Email = Input.Email };
        var result = await _userManager.CreateAsync(user, Input.Password);
        if (result.Succeeded)
        {
            _logger.LogInformation("User created a new account with password.");

            var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);
            var callbackUrl = Url.Page(
                "/Account/ConfirmEmail",
                pageHandler: null,
                values: new { userId = user.Id, code = code },
                protocol: Request.Scheme);

            await _emailSender.SendEmailAsync(Input.Email, "Confirm your email",
                $"Please confirm your account by <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clicking here</a>.");

            //await _signInManager.SignInAsync(user, isPersistent: false);
            return LocalRedirect(returnUrl);
        }
        foreach (var error in result.Errors)
        {
            ModelState.AddModelError(string.Empty, error.Description);
        }
    }

    // If we got this far, something failed, redisplay form
    return Page();
}

등록 하 고, 전자 메일을 확인 하 고, 암호 재설정Register, confirm email, and reset password

웹 앱을 실행 하 고 계정 확인 및 암호 복구 흐름을 테스트 합니다.Run the web app, and test the account confirmation and password recovery flow.

  • 앱을 실행 하 고 새 사용자 등록Run the app and register a new user
  • 계정 확인 링크에 대 한 전자 메일을 확인 합니다.Check your email for the account confirmation link. 참조 전자 메일을 디버그 전자 메일을 얻지 못한 경우.See Debug email if you don't get the email.
  • 전자 메일 확인 하기 위한 링크를 클릭 합니다.Click the link to confirm your email.
  • 전자 메일 및 암호를 로그인 합니다.Sign in with your email and password.
  • 로그 아웃 합니다.Sign out.

관리 페이지 보기View the manage page

브라우저에서 사용자 이름을 선택 합니다. 사용자 이름이 있는 브라우저 창Select your user name in the browser: browser window with user name

사용 하 여 관리 페이지가 표시 되는 프로필 탭이 선택 합니다.The manage page is displayed with the Profile tab selected. 합니다 전자 메일 확인 된 전자 메일을 나타내는 확인란을 보여 줍니다.The Email shows a check box indicating the email has been confirmed.

테스트 암호 재설정Test password reset

  • 로그인 할 경우 선택할 로그 아웃합니다.If you're signed in, select Logout.
  • 선택 합니다 에 로그인 연결 하 고 선택 합니다 암호를 잊으셨나요? 링크.Select the Log in link and select the Forgot your password? link.
  • 계정을 등록 하는 데 전자 메일을 입력 합니다.Enter the email you used to register the account.
  • 암호 재설정에 대 한 링크가 포함 된 전자 메일이 전송 됩니다.An email with a link to reset your password is sent. 전자 메일을 확인 하 고 암호 재설정에 대 한 링크를 클릭 합니다.Check your email and click the link to reset your password. 암호가 성공적으로 다시 설정, 메일 및 새 암호를 사용 하 여 서명할 수 있습니다.After your password has been successfully reset, you can sign in with your email and new password.

전자 메일 및 작업 시간 제한 변경Change email and activity timeout

기본 비활성 시간은 14 일입니다.The default inactivity timeout is 14 days. 다음 코드는 5 일에 비활성 시간을 설정합니다.The following code sets the inactivity timeout to 5 days:

services.ConfigureApplicationCookie(o => {
    o.ExpireTimeSpan = TimeSpan.FromDays(5);
    o.SlidingExpiration = true;
});

모든 데이터 보호 토큰 lifespans 변경Change all data protection token lifespans

다음 코드는 3 시간으로 모든 데이터 보호 토큰 제한 시간을 변경합니다.The following code changes all data protection tokens timeout period to 3 hours:

public void ConfigureServices(IServiceCollection services)
{

    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(
            Configuration.GetConnectionString("DefaultConnection")));

    services.AddDefaultIdentity<IdentityUser>(config =>
    {
        config.SignIn.RequireConfirmedEmail = true;
    })
        .AddDefaultUI(UIFramework.Bootstrap4)
        .AddEntityFrameworkStores<ApplicationDbContext>();

    services.Configure<DataProtectionTokenProviderOptions>(o =>
                o.TokenLifespan = TimeSpan.FromHours(3));

    services.AddTransient<IEmailSender, EmailSender>();
    services.Configure<AuthMessageSenderOptions>(Configuration);

    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}

기본 제공 Id 사용자 토큰에 (참조 AspNetCore/src/Identity/Extensions.Core/src/TokenOptions.cs )가를 하루 시간 제한합니다.The built in Identity user tokens (see AspNetCore/src/Identity/Extensions.Core/src/TokenOptions.cs )have a one day timeout.

전자 메일 토큰 수명을 변경 합니다.Change the email token lifespan

기본 토큰 수명을 Id 사용자 토큰 됩니다 하루합니다.The default token lifespan of the Identity user tokens is one day. 이 섹션에는 전자 메일 토큰 수명이 변경 하는 방법을 보여 줍니다.This section shows how to change the email token lifespan.

사용자 지정을 추가 DataProtectorTokenProvider<TUser >DataProtectionTokenProviderOptions:Add a custom DataProtectorTokenProvider<TUser> and DataProtectionTokenProviderOptions:

public class CustomEmailConfirmationTokenProvider<TUser> 
                                       : DataProtectorTokenProvider<TUser> where TUser : class
{
    public CustomEmailConfirmationTokenProvider(IDataProtectionProvider dataProtectionProvider,
        IOptions<EmailConfirmationTokenProviderOptions> options) 
                                                        : base(dataProtectionProvider, options)
    {

    }
}
public class EmailConfirmationTokenProviderOptions : DataProtectionTokenProviderOptions
{
    public EmailConfirmationTokenProviderOptions()
    {
        Name = "EmailDataProtectorTokenProvider";
        TokenLifespan = TimeSpan.FromHours(4);
    }
}

서비스 컨테이너에 사용자 지정 공급자를 추가 합니다.Add the custom provider to the service container:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(
            Configuration.GetConnectionString("DefaultConnection")));

    services.AddDefaultIdentity<IdentityUser>(config =>
    {
        config.SignIn.RequireConfirmedEmail = true;
        config.Tokens.ProviderMap.Add("CustomEmailConfirmation",
            new TokenProviderDescriptor(
                typeof(CustomEmailConfirmationTokenProvider<IdentityUser>)));
        config.Tokens.EmailConfirmationTokenProvider = "CustomEmailConfirmation";                
    })
        .AddDefaultUI(UIFramework.Bootstrap4)
        .AddEntityFrameworkStores<ApplicationDbContext>();

    services.AddTransient<CustomEmailConfirmationTokenProvider<IdentityUser>>();
    services.AddTransient<IEmailSender, EmailSender>();            
    services.Configure<AuthMessageSenderOptions>(Configuration); // For SendGrid key.

    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}

전자 메일 확인 다시 전송Resend email confirmation

참조 이 GitHub 문제합니다.See this GitHub issue.

전자 메일을 디버그Debug email

경우 전자 메일 작업을 가져올 수 없습니다.If you can't get email working:

  • 중단점을 설정 EmailSender.Execute 확인 하려면 SendGridClient.SendEmailAsync 라고 합니다.Set a breakpoint in EmailSender.Execute to verify SendGridClient.SendEmailAsync is called.
  • 만들기는 전자 메일을 보내는 콘솔 앱 비슷한 코드를 사용 하 여 EmailSender.Execute입니다.Create a console app to send email using similar code to EmailSender.Execute.
  • 검토 합니다 전자 메일 작업 페이지입니다.Review the Email Activity page.
  • 스팸 폴더를 확인 합니다.Check your spam folder.
  • 다른 전자 메일 별칭에는 다른 전자 메일 공급자 (Microsoft, Yahoo, Gmail 등)를 시도 하세요.Try another email alias on a different email provider (Microsoft, Yahoo, Gmail, etc.)
  • 다른 메일 계정으로 보내기를 시도 합니다.Try sending to different email accounts.

보안 모범 사례 하는 것 하지 테스트 및 개발에서 프로덕션 비밀을 사용 합니다.A security best practice is to not use production secrets in test and development. Azure에 앱을 게시 하는 경우 Azure 웹 앱 포털에서 응용 프로그램 설정으로 SendGrid 비밀을 설정할 수 있습니다.If you publish the app to Azure, you can set the SendGrid secrets as application settings in the Azure Web App portal. 구성 시스템 환경 변수에서 키를 읽을 수 설정 됩니다.The configuration system is set up to read keys from environment variables.

로컬 및 소셜 로그인 계정을 병합합니다Combine social and local login accounts

이 섹션을 완료 하려면 먼저 외부 인증 공급자를 활성화 해야 합니다.To complete this section, you must first enable an external authentication provider. 참조 Facebook, Google 및 외부 공급자 인증합니다.See Facebook, Google, and external provider authentication.

로컬 및 소셜 계정 전자 메일 링크를 클릭 하 여 결합할 수 있습니다.You can combine local and social accounts by clicking on your email link. 그러나 다음 순서로 "RickAndMSFT@gmail.com" 로컬 로그인;으로 처음 만들어질 수 계정으로 소셜 로그인을 먼저 만든 다음 로컬 로그인을 추가 합니다.In the following sequence, "RickAndMSFT@gmail.com" is first created as a local login; however, you can create the account as a social login first, then add a local login.

웹 응용 프로그램: RickAndMSFT 인증 된 사용자

클릭 합니다 관리 링크 합니다.Click on the Manage link. 이 계정과 연결 된 참고 0 외부 (소셜 로그인)Note the 0 external (social logins) associated with this account.

보기 관리

다른 로그인 서비스에 대 한 링크를 클릭 하 고 앱 요청을 수락 합니다.Click the link to another login service and accept the app requests. 다음 이미지에서는 Facebook는 외부 인증 공급자:In the following image, Facebook is the external authentication provider:

Facebook을 목록 외부 로그인 보기를 관리 합니다.

두 개의 계정은 결합 되었습니다.The two accounts have been combined. 계정이 나 로그인 수 있습니다.You are able to sign in with either account. 사용자가 자신의 소셜 로그인 인증 서비스가 다운 된 또는 가능성이 소셜 계정에 대 한 액세스를 손실 했습니다 되는 경우 로컬 계정을 추가 수 있습니다.You might want your users to add local accounts in case their social login authentication service is down, or more likely they've lost access to their social account.

사이트 사용자 후 계정 확인을 사용 하도록 설정Enable account confirmation after a site has users

사용자를 사용 하 여 사이트에서 계정 확인을 사용 하도록 설정 하면 모든 기존 사용자를 잠급니다.Enabling account confirmation on a site with users locks out all the existing users. 해당 계정 확인 되지 때문에 기존 사용자가 잠겨 있습니다.Existing users are locked out because their accounts aren't confirmed. 기존 사용자 잠금 문제를 해결 하려면 다음 방법 중 하나를 사용 합니다.To work around existing user lockout, use one of the following approaches:

  • 로 확인 되 고 모든 기존 사용자를 표시 하도록 데이터베이스를 업데이트 합니다.Update the database to mark all existing users as being confirmed.
  • 기존 사용자를 확인 합니다.Confirm existing users. 예를 들어 일괄 처리-송신 확인 링크를 사용 하 여 전자 메일입니다.For example, batch-send emails with confirmation links.