我正在使用Asp.Net-Identity-2,我开发了验证电子邮件流程。
一切都在我的本地环境中运行良好但是一旦我将代码部署到我的服务器并且我在我的服务器上测试相同的场景(在我的本地工作),它就会显示“无效令牌”。
方案
我已经检查了question中所有可能出现的错误,并且我把一切都弄好了,这就是为什么我的本地工作完美无缺。必须是服务器的东西。我认为服务器的日期可能会影响,但我同步了我的数据库服务器和我的Web服务器的日期,但它仍然失败。
我使用GenerateEmailConfirmationTokenAsync生成令牌并使用ConfirmEmailAsync确认令牌。我真的在执行这个方法,因为我为此设置了日志,所以我可以肯定它(当你不知道发生了什么时,你必须确定一切正确吗?)
我已经对url进行了编码/解码,因此令牌不会被破坏。我确信这是因为我把日志和服务器中的代码运行并检查了几次。
用户在数据库中有一个安全标记,所以不是那个
TokenLifeSpan是8天。所以不是那样。
我甚至在UserValidator中尝试过AllowOnlyAlphanumericUserNames属性= false,甚至还尝试了UniqueEmail = false
userManager.UserValidator = new UserValidator<User>(userManager) { AllowOnlyAlphanumericUserNames = false, UniqueEmail = false };
生成令牌的代码
ApplicationUserManager.GenerateEmailConfirmationTokenAsync(userId);
确认令牌的代码
ApplicationUserManager.ConfirmEmailAsync(subject, token);
有什么想法吗?
更新
它正在服务器/本地与所有客户端一起工作但不与Php客户端一起工作,并且Php客户端正在做额外的工作,这正在改变安全标记因此问题。
由于服务器上唯一的客户端是Php,我认为服务器出了问题,而不是我的本地环境。在我的本地和调试中安装整个环境(使用php客户端)后,我发现了问题。请阅读以下答案。
答案 0 :(得分:0)
嗯,错误是由令牌生成后执行的代码引起的。此代码正在更改数据库中用户的SecurityStamp。
由于Asp.Net Identity 2使用安全标记生成并验证令牌,并且在生成令牌后更改了令牌,因此令牌始终无效。
谢谢!