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