激活令牌无效 - 控制器有问题?
Invalid activation token - problem with controller?
我有一个非常奇怪的问题。在以前版本的 .net core 中一切正常,但现在在 .net core 3.1 中却没有。
事情是这样的,在用户注册帐户后,我会向他发送激活电子邮件,其中包含这样创建的激活码:
var activationCode = await userMan.GenerateEmailConfirmationTokenAsync(su);
接下来我生成一个 http url,其格式如下:
http://localhost/api/users/activate?userId=1234&code=abc+860/def==
现在,请注意 userId 是一个有效的 GUID,我的激活码只是示例,因为我确实得到了一个很长的代码。但此代码中重要的是 - 它具有加号 (+)、斜杠并以双等号结尾。
现在我收到一封电子邮件,其中包含有效的用户 GUID 和仍然有效的激活码。但是,当我单击此 link 并且我的 UsersController 启动时,发生了一些不好的事情。这是我在UserController中的激活方法(部分代码)
[Route("api/[controller]")]
[ApiController]
public class UsersController : ControllerBase
{
[HttpGet("activate")]
[AllowAnonymous]
public async Task<IActionResult> ActivateAccount([FromQuery] Guid userId, [FromQuery] string code)
{
if (userId == Guid.Empty || string.IsNullOrWhiteSpace(code))
return BadRequest();
}
}
奇怪的是code
参数在这里无效。该值只是没有加号。相反,它有空格。怎么了?
您需要URL 对参数进行编码。如果没有它,一些符号可能会被剥离。
您可以阅读更多 here 有关符号和程序的信息。
正确的 URL 你会是:
http://localhost/api/users/activate?userId=1234&code=abc%2B860%2Fdef%3D%3D
要生成正确的 URL,您可以在给某人 URL 之前使用 HttpUtility.UrlEncode。阅读 link,因为其中包含可能有用的详细信息。这是编码 URLs.
的一些常见方法
here 是一篇不错的文章,列出了所有或大多数方法,讨论了如何达到顶峰。
我有一个非常奇怪的问题。在以前版本的 .net core 中一切正常,但现在在 .net core 3.1 中却没有。
事情是这样的,在用户注册帐户后,我会向他发送激活电子邮件,其中包含这样创建的激活码:
var activationCode = await userMan.GenerateEmailConfirmationTokenAsync(su);
接下来我生成一个 http url,其格式如下:
http://localhost/api/users/activate?userId=1234&code=abc+860/def==
现在,请注意 userId 是一个有效的 GUID,我的激活码只是示例,因为我确实得到了一个很长的代码。但此代码中重要的是 - 它具有加号 (+)、斜杠并以双等号结尾。
现在我收到一封电子邮件,其中包含有效的用户 GUID 和仍然有效的激活码。但是,当我单击此 link 并且我的 UsersController 启动时,发生了一些不好的事情。这是我在UserController中的激活方法(部分代码)
[Route("api/[controller]")]
[ApiController]
public class UsersController : ControllerBase
{
[HttpGet("activate")]
[AllowAnonymous]
public async Task<IActionResult> ActivateAccount([FromQuery] Guid userId, [FromQuery] string code)
{
if (userId == Guid.Empty || string.IsNullOrWhiteSpace(code))
return BadRequest();
}
}
奇怪的是code
参数在这里无效。该值只是没有加号。相反,它有空格。怎么了?
您需要URL 对参数进行编码。如果没有它,一些符号可能会被剥离。 您可以阅读更多 here 有关符号和程序的信息。
正确的 URL 你会是:
http://localhost/api/users/activate?userId=1234&code=abc%2B860%2Fdef%3D%3D
要生成正确的 URL,您可以在给某人 URL 之前使用 HttpUtility.UrlEncode。阅读 link,因为其中包含可能有用的详细信息。这是编码 URLs.
的一些常见方法here 是一篇不错的文章,列出了所有或大多数方法,讨论了如何达到顶峰。