为电子邮件确认生成短EmailConfirmationToken [英] Generate a Short EmailConfirmationToken for Email Confirmation

查看:146
本文介绍了为电子邮件确认生成短EmailConfirmationToken的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试为我的webapp实现注册过程。我正在使用此过程生成EmailConfirmationToken并通过电子邮件将其发送给用户。



  if (result.Succeeded)
{
string code = await userManager.GenerateEmailConfirmationTokenAsync(user.Id);
Uri baseUri = new Uri(OpenIdConnectAuthenticationAuthority);
Uri callbackUrl = new Uri(baseUri + / Register / ConfirmEmail /?userId = + user.Id + & code = + HttpUtility.UrlEncode(code));
await userManager.SendEmailAsync(user.Id, BIMcube电子邮件确认 请点击以下链接确认您的帐户:< a href = \ + callbackUrl + \> link< / a>);
}





生成的令牌非常长。这是一个示例的令牌:



<预LANG = XML> AQAAANCMnd8BFdERjHoAwE / CL + sBAAAA48Afnm / pyU6UZrt2VXGfHAAAAAACAAAAAAADZgAAwAAAABAAAABa10013CpPZN7NSwTZYu03AAAAAASAAACgAAAAEAAAAHFDDmUWdvgFz4QCqe0ML / 1gAAAAN7hpoCFiW8NcTaMNCGMLALUYL0gcfXbPjXQddI5w68mm4FfbVhMkJPbL + JTA8RXZ7mb6VgNmxS / cxdMzy5BQdIdVUIWzQYPwBlX6Oimx + zESVcCSpUSVpwI05 + ls79nmFAAAAPTqCR7RSVR5zQT3UaJlcd1BokRr





我的UserTokenProvider是这样实现的:

  var  dataProtectionProvider =  new  DpapiDataProtectionProvider(  IdentityServer3); 

if (dataProtectionProvider!= null
{
UserTokenProvider = new DataProtectorTokenProvider< User>(dataProtectionProvider.Create( ASP.NET Identity))
{
TokenLifespan = TimeSpan.FromHours( 3
} ;
}





是否有可能生成电子邮件确认的短代码?你知道我需要实现什么吗?

解决方案

对于唯一令牌创建GUID



string strToken = Convert.ToBase64String(Guid.NewGuid()。ToByteArray());



或者您可以使用日期时间时间戳并生成令牌。

byte [] time = BitConverter.GetBytes(DateTime.UtcNow.ToBinary());

byte [] key = Guid.NewGuid()。ToByteArray();

string token = Convert.ToBase64String(time.Concat(key).ToArray());


I'm trying to implement a registration prozess for my webapp. I am using this process for generating a EmailConfirmationToken and sending it via email to the user.

if (result.Succeeded)
 {
     string code = await userManager.GenerateEmailConfirmationTokenAsync(user.Id);
     Uri baseUri = new Uri(OpenIdConnectAuthenticationAuthority);
     Uri callbackUrl = new Uri(baseUri + "/Register/ConfirmEmail/?userId=" + user.Id + "&code=" + HttpUtility.UrlEncode(code));
     await userManager.SendEmailAsync(user.Id, "BIMcube eMail Confirmation", "Please confirm your account by clicking this link: <a href=\"" + callbackUrl + "\">link</a>");
 }



The generated token is very long. This is a example token:

AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAA48Afnm/pyU6UZrt2VXGfHAAAAAACAAAAAAADZgAAwAAAABAAAABa10013CpPZN7NSwTZYu03AAAAAASAAACgAAAAEAAAAHFDDmUWdvgFz4QCqe0ML/1gAAAAN7hpoCFiW8NcTaMNCGMLALUYL0gcfXbPjXQddI5w68mm4FfbVhMkJPbL+JTA8RXZ7mb6VgNmxS/cxdMzy5BQdIdVUIWzQYPwBlX6Oimx+zESVcCSpUSVpwI05+ls79nmFAAAAPTqCR7RSVR5zQT3UaJlcd1BokRr



My UserTokenProvider is implemented like this:

var dataProtectionProvider = new DpapiDataProtectionProvider("IdentityServer3");

        if (dataProtectionProvider != null)
        {
            UserTokenProvider = new DataProtectorTokenProvider<User>(dataProtectionProvider.Create("ASP.NET Identity"))
            {
                TokenLifespan = TimeSpan.FromHours(3)
            };
        }



Is there any possibility for generating a short code for email confirmation? Do you have an idea what I need to implement?

解决方案

For unique token create GUID

string strToken = Convert.ToBase64String(Guid.NewGuid().ToByteArray());

Or you can use date time time stamp and generate token.
byte[] time = BitConverter.GetBytes(DateTime.UtcNow.ToBinary());
byte[] key = Guid.NewGuid().ToByteArray();
string token = Convert.ToBase64String(time.Concat(key).ToArray());


这篇关于为电子邮件确认生成短EmailConfirmationToken的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆