ASP.NET 核心身份 - 确认电子邮件 return url
ASP.NET Core Identity - Confirm email return url
我已经使用 ASP.NET Core Identity 为我的项目设置了注册和登录。一切正常,但有一件小事真的很烦我。
因为这是一个简单的项目,我不想通过真正向用户发送电子邮件来配置帐户确认,所以我使用默认模板,用户被重定向到 Account.RegisterConfirmation 他们可以select a link 确认帐户,将用户重定向到 /Identity/Account/ConfirmEmail,这是一个只有标题的空白页面。我不喜欢它。在 selecting link 确认帐户后,我想将用户重定向到 /Account/Login。但是我应该在哪里设置呢?
这是我迄今为止尝试过的方法:添加>新脚手架项目>身份>Account/ConfirmEmail(要覆盖的文件)现在我有 ConfirmEmail.cshtml.cs:
[AllowAnonymous]
public class ConfirmEmailModel : PageModel
{
private readonly UserManager<IdentityUser> _userManager;
public ConfirmEmailModel(UserManager<IdentityUser> userManager)
{
_userManager = userManager;
}
[TempData]
public string StatusMessage { get; set; }
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($"Unable to load user with ID '{userId}'.");
}
code = Encoding.UTF8.GetString(WebEncoders.Base64UrlDecode(code));
var result = await _userManager.ConfirmEmailAsync(user, code);
StatusMessage = result.Succeeded ? "Thank you for confirming your email." : "Error confirming your email.";
return Page();
}
}
将 return Page();
更改为 return RedirectToPage("/Account/Login");
导致 InvalidOperationException:尝试激活 'Project.Areas.Identity.Pages.Account.ConfirmEmailModel'.[=42 时无法解析类型 'Microsoft.AspNetCore.Identity.UserManager`1[Microsoft.AspNetCore.Identity.IdentityUser]' 的服务=]
邮件确认后returnurl到/Account/Login在哪里设置?
我也尝试过不使用脚手架和覆盖 Account/ConfirmEmail,在 Register.cshtml.cs 中有
var callbackUrl = Url.Page(
"/Account/ConfirmEmail",
pageHandler: null,
values: new { area = "Identity", userId = user.Id, code = code, returnUrl = returnUrl },
protocol: Request.Scheme);
我尝试将 returnUrl = returnUrl
更改为 returnUrl = "~/Account/Login"
,但没有成功。
**** 更新 ***
因为对于这样一个简单的项目我不需要电子邮件确认,所以我刚刚添加了这个
options.SignIn.RequireConfirmedAccount = false
到 Startup class,因此不需要帐户确认或电子邮件确认。
services.AddDefaultIdentity<ApplicationUser>(options => options.SignIn.RequireConfirmedAccount = false)
.AddEntityFrameworkStores<ProjectContext>();
services.Configure<IdentityOptions>(options =>
{
options.SignIn.RequireConfirmedEmail = false;
options.SignIn.RequireConfirmedAccount = false;
});
I'm using the default templates, the user is redirected to the Account.RegisterConfirmation
在配置身份服务的默认代码中,我们会发现RequireConfirmedAccount
选项设置为true
,如下所示。
services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores<ApplicationDbContext>();
我们可以发现,在 RegisterModel
class 页面处理程序中创建用户帐户后,用户将被重定向到 RegisterConfirmation
页面。
if (_userManager.Options.SignIn.RequireConfirmedAccount)
{
return RedirectToPage("RegisterConfirmation", new { email = Input.Email, returnUrl = returnUrl });
}
else
{
it is a simple project I don't want to configure account confirmation
如果不需要账户确认,则无法设置
RequireConfirmedAccount property (defaults to false) of SignInOptions 在配置身份服务时。
services.AddDefaultIdentity<ApplicationUser>()
.AddEntityFrameworkStores<ProjectContext>();
或者像您一样,明确设置 SignIn settings。
services.AddDefaultIdentity<ApplicationUser>(options => options.SignIn.RequireConfirmedAccount = false)
.AddEntityFrameworkStores<ProjectContext>();
此外,我们可以发现你在Startup ConfigureServices方法中调用services.AddDefaultIdentity<ApplicationUser>(...)
使用自定义ApplicationUser
配置身份服务class,但是你在[=中注入了一个UserManager实例20=] class using UserManager<IdentityUser>
(应该使用UserManager<ApplicationUser>
),导致异常。
我已经使用 ASP.NET Core Identity 为我的项目设置了注册和登录。一切正常,但有一件小事真的很烦我。
因为这是一个简单的项目,我不想通过真正向用户发送电子邮件来配置帐户确认,所以我使用默认模板,用户被重定向到 Account.RegisterConfirmation 他们可以select a link 确认帐户,将用户重定向到 /Identity/Account/ConfirmEmail,这是一个只有标题的空白页面。我不喜欢它。在 selecting link 确认帐户后,我想将用户重定向到 /Account/Login。但是我应该在哪里设置呢?
这是我迄今为止尝试过的方法:添加>新脚手架项目>身份>Account/ConfirmEmail(要覆盖的文件)现在我有 ConfirmEmail.cshtml.cs:
[AllowAnonymous]
public class ConfirmEmailModel : PageModel
{
private readonly UserManager<IdentityUser> _userManager;
public ConfirmEmailModel(UserManager<IdentityUser> userManager)
{
_userManager = userManager;
}
[TempData]
public string StatusMessage { get; set; }
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($"Unable to load user with ID '{userId}'.");
}
code = Encoding.UTF8.GetString(WebEncoders.Base64UrlDecode(code));
var result = await _userManager.ConfirmEmailAsync(user, code);
StatusMessage = result.Succeeded ? "Thank you for confirming your email." : "Error confirming your email.";
return Page();
}
}
将 return Page();
更改为 return RedirectToPage("/Account/Login");
导致 InvalidOperationException:尝试激活 'Project.Areas.Identity.Pages.Account.ConfirmEmailModel'.[=42 时无法解析类型 'Microsoft.AspNetCore.Identity.UserManager`1[Microsoft.AspNetCore.Identity.IdentityUser]' 的服务=]
邮件确认后returnurl到/Account/Login在哪里设置?
我也尝试过不使用脚手架和覆盖 Account/ConfirmEmail,在 Register.cshtml.cs 中有
var callbackUrl = Url.Page(
"/Account/ConfirmEmail",
pageHandler: null,
values: new { area = "Identity", userId = user.Id, code = code, returnUrl = returnUrl },
protocol: Request.Scheme);
我尝试将 returnUrl = returnUrl
更改为 returnUrl = "~/Account/Login"
,但没有成功。
**** 更新 ***
因为对于这样一个简单的项目我不需要电子邮件确认,所以我刚刚添加了这个
options.SignIn.RequireConfirmedAccount = false
到 Startup class,因此不需要帐户确认或电子邮件确认。
services.AddDefaultIdentity<ApplicationUser>(options => options.SignIn.RequireConfirmedAccount = false)
.AddEntityFrameworkStores<ProjectContext>();
services.Configure<IdentityOptions>(options =>
{
options.SignIn.RequireConfirmedEmail = false;
options.SignIn.RequireConfirmedAccount = false;
});
I'm using the default templates, the user is redirected to the Account.RegisterConfirmation
在配置身份服务的默认代码中,我们会发现RequireConfirmedAccount
选项设置为true
,如下所示。
services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores<ApplicationDbContext>();
我们可以发现,在 RegisterModel
class 页面处理程序中创建用户帐户后,用户将被重定向到 RegisterConfirmation
页面。
if (_userManager.Options.SignIn.RequireConfirmedAccount)
{
return RedirectToPage("RegisterConfirmation", new { email = Input.Email, returnUrl = returnUrl });
}
else
{
it is a simple project I don't want to configure account confirmation
如果不需要账户确认,则无法设置 RequireConfirmedAccount property (defaults to false) of SignInOptions 在配置身份服务时。
services.AddDefaultIdentity<ApplicationUser>()
.AddEntityFrameworkStores<ProjectContext>();
或者像您一样,明确设置 SignIn settings。
services.AddDefaultIdentity<ApplicationUser>(options => options.SignIn.RequireConfirmedAccount = false)
.AddEntityFrameworkStores<ProjectContext>();
此外,我们可以发现你在Startup ConfigureServices方法中调用services.AddDefaultIdentity<ApplicationUser>(...)
使用自定义ApplicationUser
配置身份服务class,但是你在[=中注入了一个UserManager实例20=] class using UserManager<IdentityUser>
(应该使用UserManager<ApplicationUser>
),导致异常。