当前位置: 首页 > 知识库问答 >
问题:

ASP。NET Core Identity-确认电子邮件返回url

太叔富
2023-03-14

我已经设法使用ASP. NET核心身份为我的项目设置了注册和登录。一切正常,但有一件小事真的困扰着我。

由于这是一个简单的项目,我不想通过向用户发送电子邮件来配置帐户确认,因此我使用默认模板,用户被重定向到帐户。RegisterConfirmation,他们可以选择一个链接来确认帐户,该链接将用户重定向到/Identity/account/ConfirmEmail,这是一个只有标题的空白页面。我不喜欢它。在选择一个链接以确认帐户后,我想将用户重定向到/account/Login。但是我应该在哪里设置呢?

到目前为止,我一直在尝试:添加

[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();
        }
    }

更改返回Page();返回ReDirectToPage("/帐户/登录");导致无效操作异常:无法解析类型为“Microsoft”的服务。AspNetCore。身份。UserManager'1[Microsoft. AspNetCore。身份。身份用户]',同时尝试激活'项目。区域。身份。页面。帐户。确认电子邮件模型'。

确认电子邮件后,我在哪里设置返回url到/帐户/登录?

我还尝试了在注册表中不使用脚手架和覆盖帐户/确认邮件。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类,因此需要帐户确认或电子邮件确认。

services.AddDefaultIdentity<ApplicationUser>(options => options.SignIn.RequireConfirmedAccount = false)
                    .AddEntityFrameworkStores<ProjectContext>();


services.Configure<IdentityOptions>(options =>
{
    options.SignIn.RequireConfirmedEmail = false;
    options.SignIn.RequireConfirmedAccount = false;
});

共有1个答案

东龙野
2023-03-14

我使用默认模板,用户被重定向到帐户。注册确认

在配置身份服务的默认代码中,我们会发现RequireConfirmedAccount选项设置为true,如下所示。

services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
    .AddEntityFrameworkStores<ApplicationDbContext>();

我们可以发现,在类页面处理程序中创建用户帐户后,用户将被重定向到注册确认页面。

if (_userManager.Options.SignIn.RequireConfirmedAccount)
{
    return RedirectToPage("RegisterConfirmation", new { email = Input.Email, returnUrl = returnUrl });
}
else
{

这是一个简单的项目我不想配置帐户确认

如果您不需要帐户确认,则在配置身份服务时无法设置SignInOptions的必需确认帐户属性(默认为false)。

services.AddDefaultIdentity<ApplicationUser>()
        .AddEntityFrameworkStores<ProjectContext>();

或者像您所做的那样,显式设置登录设置。

services.AddDefaultIdentity<ApplicationUser>(options => options.SignIn.RequireConfirmedAccount = false)
    .AddEntityFrameworkStores<ProjectContext>();

此外,我们可以发现您调用了服务。AddDefaultIdity

 类似资料:
  • 我想为新用户设置一封确认电子邮件。 所以当调试时,单击链接时,userId是可以的,但“code”输入参数为空,所以 是真的,然后执行 发送给注册用户的电子邮件如下所示: 请单击此链接确认您的帐户:https://localhost:44314/Account/ConfirmEmail?userId=3ec7ac6a-3329-4821-a09b-aa4843598eaa 编辑:链接包含 实际上,

  • 我使用的是firebase javascript API。 也不起作用

  • 主要内容:使用 CDOSYS 发送电子邮件,CDONTs 怎么样?,使用 CDOSYS 的实例CDOSYS 是 ASP 中的内建组件。此组件用于通过 ASP 发送电子邮件。 使用 CDOSYS 发送电子邮件 CDO (Collaboration Data Objects) 是一项微软的技术,设计目的是用来简化通讯应用程序的创建。 CDOSYS 是 ASP 中的内建组件。我们将向您演示如何通过 ASP 使用该组件来发送电子邮件。 CDONTs 怎么样? 微软已经在 Windows 2000、

  • 此API适用于移动应用程序。目标是让用户在注册时确认电子邮件。当用户注册时,会生成一个确认链接并通过电子邮件发送。我在MVC项目中也采用了同样的方法,效果很好,但在Web API项目中,它似乎无法实现。现在,当用户单击该链接时,应该点击相应的动作方法并完成任务。 唯一的问题是,ConfirmEmail操作方法在单击确认链接时没有被触发,尽管它看起来很好。 以下是可能有帮助的主要配置 MVC服务配置

  • 我们刚刚启动了我们的ASP。NETMVC(使用Identity 2.0)web应用程序6天前已经有超过5000人注册了帐户,太棒了! 问题是3-5%点击确认电子邮件链接的用户(似乎也是重置密码)会出现错误屏幕,大概是因为他们有一个无效的令牌。 我在StackOverflow上读到,您需要对url进行编码,以避免特殊字符将其丢弃,然后在验证之前对其进行解码。不过,我这样做没有效果,一些用户仍然在他们

  • 我已经建立了一个ASP。具有身份的NET Core 5 web应用程序。一切正常。唯一的问题是,当新用户在他们的电子邮件确认中点击链接后,网站上显示的消息是“确认电子邮件”。确认有效,但消息让用户感到困惑。 发送到的地址是: https://Baseurl/身份/帐户/确认Email? userId=******** Identity/Account文件夹中的任何文件都不包含显示的邮件。是否可以更