如何防止在 ASP.Net Web 表单(身份)中注册后自动登录?

How to prevent auto login after registration in ASP.Net Web Forms (Identity)?

帐户注册后,用户将自动登录到站点。如何通过先向用户发送确认电子邮件,然后在确认帐户后用户可以登录来阻止此过程?

基本上任何用户未经确认都不允许访问该站点。

Register.aspx.cs

namespace Web_WebApp.Account
{
    public partial class Register : Page
    {
        protected void CreateUser_Click(object sender, EventArgs e)
        {

            var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();
            var signInManager = Context.GetOwinContext().Get<ApplicationSignInManager>();
            //var user = new ApplicationUser() { UserName = UserName.Text, Email = Email.Text, FirstName = FirstName.Text, MiddleName = MiddleName.Text, LastName = LastName.Text, RegistrationDate = DateTime.Now };


            var user = new ApplicationUser()
            {
                UserName = UserName.Text,
                Email = Email.Text,
                FirstName = FirstName.Text,
                MiddleName = MiddleName.Text,
                LastName = LastName.Text,
                RegistrationDate = DateTime.Now,

            };


            IdentityResult result = manager.Create(user, Password.Text );

            if (result.Succeeded)
            {
                // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771


                string code = manager.GenerateEmailConfirmationToken(user.Id);
                string callbackUrl = IdentityHelper.GetUserConfirmationRedirectUrl(code, user.Id, Request);
                manager.SendEmail(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>.");

                signInManager.SignIn( user, isPersistent: false, rememberBrowser: false);
                IdentityHelper.RedirectToReturnUrl(Request.QueryString["ReturnUrl"], Response);
            }
            else 
            {
                ErrorMessage.Text = result.Errors.FirstOrDefault();
            }
        }
    }
}

感谢您为我的问题找到解决方案所做的努力。

我会删除以下行:

signInManager.SignIn( user, isPersistent: false, rememberBrowser: false);

这将防止用户在收到电子邮件和确认用户帐户之前登录。

然后我会将用户重定向到一个页面,其中显示 he/she 应该检查他们的收件箱以获取确认电子邮件。

PS:记得在登录用户时检查user.EmailConfirmed,如果他们在未确认帐户的情况下尝试登录,则向他们显示"An email has been sent..."。