Kev*_*ell 2 c# asp.net webforms asp.net-identity
帐户注册后,用户将自动登录到该站点。如何通过首先向用户发送确认电子邮件,然后在确认帐户后用户可以登录来防止此过程?
基本上,未经确认,任何用户都不得访问该站点。
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();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
感谢您为我的问题找到解决方案所做的努力。
我会删除该行:
signInManager.SignIn( user, isPersistent: false, rememberBrowser: false);
Run Code Online (Sandbox Code Playgroud)
这将阻止用户在收到电子邮件和确认用户帐户之前登录。
然后我会将用户重定向到一个页面,该页面说他/她应该检查他们的收件箱以获取确认电子邮件。
PS:请记住user.EmailConfirmed在登录用户时检查,如果他们在没有确认帐户的情况下尝试登录,则向他们显示“已发送电子邮件...”。
| 归档时间: |
|
| 查看次数: |
2219 次 |
| 最近记录: |