ASP.Net Identity GenerateEmailConfirmationTokenAsync失败

时间:2017-03-07 10:36:12

标签: c# asp.net asp.net-mvc asp.net-identity

我正在开发一个MVC项目,用于将身份资料与启动MVC项目分开。在执行行

时进行用户注册
UserManager.GenerateEmailConfirmationTokenAsync(userId)

它会抛出带有消息

的System.ArgumentException
  

如果指定了目的列表,则列表不能包含仅由空格字符组成的空条目或条目。   参数名称:用途

堆栈跟踪

at System.Web.Security.MachineKey.Protect(Byte[] userData, String[] purposes)
   at Microsoft.Owin.Host.SystemWeb.DataProtection.MachineKeyDataProtector.Protect(Byte[] userData)
   at Microsoft.Owin.Security.DataProtection.AppBuilderExtensions.CallDataProtectionProvider.CallDataProtection.Protect(Byte[] userData)
   at Microsoft.AspNet.Identity.Owin.DataProtectorTokenProvider`2.<GenerateAsync>d__0.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNet.Identity.UserManager`2.<GenerateUserTokenAsync>d__fe.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
   at Robot.ACG.Web.Controllers.AccountController.<Register>d__15.MoveNext() in...

任何想法?

2 个答案:

答案 0 :(得分:1)

GenerateEmailConfirmationTokenAsync生成令牌。问题可能来自您的不同服务器:

  

如果您的令牌是在一台服务器上生成的,然后尝试在另一台服务器上验证它。原因是令牌受MachineKey.Protect保护。这是在OWIN初始化时配置的。

来自Max Vasilyev, Trailmax Tech

答案 1 :(得分:0)

我认为你的问题是你不应该传递一个Id,而是一个用户,至少在你使用asp.net Core时:

UserManager.GenerateEmailConfirmationTokenAsync(user)