我正在处理一个ASP. NET Core中的项目。
在这个项目中,用户必须在使用他们的面板之前确认他们的邮件。我已经编写了这部分代码,但有一个问题。
当我调试项目并获得确认链接,将其复制并粘贴到浏览器时,邮件确认就会成功
但是
当我通过电子邮件将确认Url发送到用户的邮件并且用户单击它以重定向到我的网站时,确认失败。
我不理解这个问题,因为它很奇怪。我已经硬编码了一些部分来测试它,但没有任何变化。
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Register(RegisterViewModel model)
{
try
{
if (ModelState.IsValid)
{
if (model.ReferralCode != null)
{
var tmpUser = userManager.Users.FirstOrDefault(f => f.IntroductionCode == model.ReferralCode);
if(tmpUser == null)
{
return Json(new { result = "error", target = "register", message = $"No user found with this({model.ReferralCode}) referral code" });
}
}
var user = new ApplicationUser
{
Id = Guid.NewGuid().ToString(),
FullName = model.FullName,
Email = model.Email,
UserName = model.Email,
Balance = 0,
ReferralCode = model.ReferralCode,
IntroductionCode = new Random().RandomString(16),
IsVerified = false
};
var signUpResut = await userManager.CreateAsync(user, model.Password);
if (signUpResut == IdentityResult.Success)
{
var token = await userManager.GenerateEmailConfirmationTokenAsync(user);
var emailActivationUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, verifyToken = token });
new MailHelper(_logger).SendConfirmationEmail(user.FullName,user.Id, user.Email, token);
_logger.Log(LogLevel.Information, $"User {model.Email} Registered Successfully.");
return Json(new { result = "success", target = "register", message = "You have successfully registered. Check your mail to activate account." });
}
return Json(new { result = "error", target = "register", message = "Something went wrong in server side." });
}
return Json(new { result = "error", target = "register", message = "Something went wrong in server side." });
}
catch (Exception exc)
{
_logger.Log(LogLevel.Critical, $"Failed Registeration : {exc.Message}");
return Json(new { result = "error", target = "register", message = "Something went wrong in server side." });
}
}
这是邮件发件人代码
public bool SendConfirmationEmail(string name, string id, string email, string confirmationToken)
{
try
{
var mailMessage = new MimeMessage();
mailMessage.From.Add(new MailboxAddress("***", "***"));
mailMessage.To.Add(new MailboxAddress(name, email));
mailMessage.Subject = "subject";
var configurationUrl = $"https://localhost:44323/Account/ConfirmEmail?userId={id}&verifyToken={confirmationToken}";
mailMessage.Body = MailBodyMaker($"<a href=\"{configurationUrl}\">Click here</a>", "Click here");
using (var smtpClient = new SmtpClient())
{
smtpClient.Connect("smtp.gmail.com", 465, true);
smtpClient.Authenticate("***", "****");
smtpClient.Send(mailMessage);
smtpClient.Disconnect(true);
}
return true;
}
catch(Exception exc)
{
_logger.Log(LogLevel.Critical, $"Email sending finished with exception ${exc.Message}");
return false;
}
}
在调试模式下,确认链接如下所示
https://localhost:44323/Account/ConfirmEmail?userId=9bb1a751-813b-48d2-a44c-74fd32a2db9a
它在电子邮件正文中如下所示
https://localhost:44323/Account/ConfirmEmail?userId=9bb1a751-813b-48d2-a44c-74fd32a2db9a
某些字符必须在url中转义,并且您的验证令牌包含此类字符,但是您可以将其按原样放入您的url中:
var configurationUrl = $"https://localhost:44323/Account/ConfirmEmail?userId={id}&verifyToken={confirmationToken}";
要转义它们-使用Uri。Escape eDataString
:
var configurationUrl = $"https://localhost:44323/Account/ConfirmEmail?userId={Uri.EscapeDataString(id)}&verifyToken={Uri.EscapeDataString(confirmationToken)}";
我使用的是firebase javascript API。 也不起作用
问题内容: 启动电子邮件意图后,如何获得确认已发送电子邮件或发生错误的回叫活动? 也许开始activityForResult?但是我应该期待什么结果呢? 问题答案: 这确实取决于您的所启动的应用程序。它可以是Gmail应用程序,可以是电子邮件应用程序,也可以是任何第三方应用程序。因此,没有100%可靠的方法来确定用户是否实际按下了。 您唯一可以做的就是检查Gmail和电子邮件应用程序在通过调用时是
此API适用于移动应用程序。目标是让用户在注册时确认电子邮件。当用户注册时,会生成一个确认链接并通过电子邮件发送。我在MVC项目中也采用了同样的方法,效果很好,但在Web API项目中,它似乎无法实现。现在,当用户单击该链接时,应该点击相应的动作方法并完成任务。 唯一的问题是,ConfirmEmail操作方法在单击确认链接时没有被触发,尽管它看起来很好。 以下是可能有帮助的主要配置 MVC服务配置
问题内容: 我试图为用户建立确认电子邮件地址,以验证他们的电子邮件是真实的。我应该使用哪个软件包来确认用户的电子邮件地址。到目前为止,我使用猫鼬和快递 代码示例 在app.post代码中,如何确认用户的电子邮件地址? 问题答案: 您要找的是“帐户验证”或“电子邮件验证”。有很多Node模块可以执行此操作,但是原理如下: 您的用户模型应具有默认情况下的属性 当用户提交有效的注册表单时,创建一个新用户
我想为新用户设置一封确认电子邮件。 所以当调试时,单击链接时,userId是可以的,但“code”输入参数为空,所以 是真的,然后执行 发送给注册用户的电子邮件如下所示: 请单击此链接确认您的帐户:https://localhost:44314/Account/ConfirmEmail?userId=3ec7ac6a-3329-4821-a09b-aa4843598eaa 编辑:链接包含 实际上,