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

确认核心web apiasp.net电子邮件

公西繁
2023-03-14

此API适用于移动应用程序。目标是让用户在注册时确认电子邮件。当用户注册时,会生成一个确认链接并通过电子邮件发送。我在MVC项目中也采用了同样的方法,效果很好,但在Web API项目中,它似乎无法实现。现在,当用户单击该链接时,应该点击相应的动作方法并完成任务。

唯一的问题是,ConfirmEmail操作方法在单击确认链接时没有被触发,尽管它看起来很好。

以下是可能有帮助的主要配置

MVC服务配置

services.AddMvc(options => 
                    {  
                        options.EnableEndpointRouting = true;
                        options.Filters.Add<ValidationFilter>();
                    })
                    .AddFluentValidation(mvcConfiguration => mvcConfiguration.RegisterValidatorsFromAssemblyContaining<Startup>())
                    .SetCompatibilityVersion(Microsoft.AspNetCore.Mvc.CompatibilityVersion.Version_3_0);

身份识别服务

 public async Task<AuthenticationResult> RegisterAsync(string email, string password)
        {
            var existingUser = await _userManager.FindByEmailAsync(email);

            if(existingUser != null)
            {
                return new AuthenticationResult { Errors = new[] { "User with this email address exists" } };
            }

            // generate user
            var newUser = new AppUser
            {
                Email = email,
                UserName = email
            };

            // register user in system
            var result = await _userManager.CreateAsync(newUser, password);

            if (!result.Succeeded)
            {
                return new AuthenticationResult
                {
                    Errors = result.Errors.Select(x => x.Description)
                };
            }

            // when registering user, assign him user role, also need to be added in the JWT!!!
            await _userManager.AddToRoleAsync(newUser, "User");

            // force user to confirm email, generate token
            var token = await _userManager.GenerateEmailConfirmationTokenAsync(newUser);

            // generate url
            var confirmationLink = _urlHelper.Action("ConfirmEmail", "IdentityController",
                    new { userId = newUser.Id, token = token }, _httpRequest.HttpContext.Request.Scheme);

            // send it per email
            var mailresult = 
                await _emailService.SendEmail(newUser.Email, "BingoApp Email Confirmation",
                $"Please confirm your account by <a href='{HtmlEncoder.Default.Encode(confirmationLink)}'>clicking here</a>.");
            if (mailresult)
                return new AuthenticationResult { Success = true };
            else
                return new AuthenticationResult { Success = false, Errors = new List<string> { "Invalid Email Address"} };
        }

控制

        [HttpPost(ApiRoutes.Identity.Register)]
        public async Task<IActionResult> Register([FromBody] UserRegistrationRequest request)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(new AuthFailedResponse
                {
                    Errors = ModelState.Values.SelectMany(x => x.Errors.Select(xx => xx.ErrorMessage))
                });
            }

            // register the incoming user data with identity service
            var authResponse = await _identityService.RegisterAsync(request.Email, request.Password);          

            if (!authResponse.Success)
            {
                return BadRequest(new AuthFailedResponse
                {
                    Errors = authResponse.Errors
                });
            }

            // confirm registration
            return Ok();
        }


        [HttpGet]
        public async Task<IActionResult> ConfirmEmail(string userId, string token)
        {
            if (userId == null || token == null)
            {
                return null;
            }

            var user = await _userManager.FindByIdAsync(userId);

            if (user == null)
            {
                return null;
            }

            var result = await _userManager.ConfirmEmailAsync(user, token);

            if (result.Succeeded)
            {
               await _emailService.SendEmail(user.Email, "BingoApp - Successfully Registered", "Congratulations,\n You have successfully activated your account!\n " +
                    "Welcome to the dark side.");
            }

            return null;
        }

共有1个答案

梁丘安晏
2023-03-14

您的帮助程序。动作(…) 在我看来有点可疑。

我不确定您是否应该传递完整的控制器名称,也就是说,包括实际的单词controller。

试试urlHelper。操作(“ConfirmEmail”,“Identity”,。

作为提示:我尝试通过使用nameof(IdtyController)来避免像这样的魔术字符串,因为它会返回没有控制器后缀的控制器名称。

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

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

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

  • 主要内容:创建用户,登录,注销在本章中,我们将向您介绍如何使用Firebase电子邮件/密码身份验证。在开始之前,需要设置登录方法,参考以下图所示 - 点击设置登录方法,然后选择电子邮件地址/密码,打开启用并保存,如下图所示 - 创建用户 要验证用户,可以使用方法。 示例 让我们来看看下面的一个例子。参考代码 - 接下来,您可以检查Firebase仪表板中的数据库,并查看用户是否已创建成功。如下所示,已经创建了一个用户账号 -

  • 我做了一个AWS Cognito用户池,没有电子邮件或电话属性(只有用户名和密码),MFA关闭了。然而,当新用户注册时,他们无法登录,直到他们的帐户得到确认。当然,这是不可能的,因为没有电子邮件或电话发送校验码。 我如何不需要用户确认,或者在注册时自动确认用户? 下面是Cognito用户池中相关选项卡的一些屏幕截图:

  • 问题内容: 我试图为用户建立确认电子邮件地址,以验证他们的电子邮件是真实的。我应该使用哪个软件包来确认用户的电子邮件地址。到目前为止,我使用猫鼬和快递 代码示例 在app.post代码中,如何确认用户的电子邮件地址? 问题答案: 您要找的是“帐户验证”或“电子邮件验证”。有很多Node模块可以执行此操作,但是原理如下: 您的用户模型应具有默认情况下的属性 当用户提交有效的注册表单时,创建一个新用户