Asp.net Core 电子邮件确认有时会显示 InvalidToken

2024-03-15

我正在使用 asp.net core Identity 2.1,我遇到了电子邮件确认的随机问题,而电子邮件确认有时会说结果.Error = InvalidToken。令牌也没有过期。

Note:我们正在使用多个服务器,并且我们还将密钥存储在一个地方,以便所有服务器都使用相同的密钥。

用于电子邮件确认的代码片段。

邮件确认

var confCode = await _userManager.GenerateEmailConfirmationTokenAsync(user);
        var callbackUrl = Url.Action("ConfirmEmail", "Account", new
        {
            userId = user.Id,
            code = WebUtility.UrlEncode(confCode)
        }, protocol: HttpContext.Request.Scheme);

        string confirmationEmailBody = string.Format(GetTranslatedResourceString("ConfirmationEmailBody"), "<a href='" + callbackUrl + "'>") + "</a>";

验证令牌

public async Task<bool> ConfirmEmailAsync(string userId, string code)
    {
        if (string.IsNullOrEmpty(userId) || string.IsNullOrEmpty(code))
            return false;


        var user = await _userManager.FindByIdAsync(userId);

        if (user == null)
            return false;

        var result = await _userManager.ConfirmEmailAsync(user, code).ConfigureAwait(false);

        if (!result.Succeeded)
            result = await _userManager.ConfirmEmailAsync(user, WebUtility.UrlDecode(code)).ConfigureAwait(false);

        return result.Succeeded;
    }

令牌无效

下面的标记被编码两次,但我们处理这种情况

CfDJ8HYrrpCgcr5GvrItPOWapXRy8WF8odd%252BVKuDup7buRsl1x4agRpfgQlEIPWiBqM0Wuilu9tCv5l%252B3lNaAb89%252Fi%252B4k0y%252FH0jdXAbabz0%252FXDGA0eUrmcKdIsDFNuXeyP5ezTVmTx8t0ky9xCTXaKLAfvTsCJviETk5Ag9JbUs3l3%252BnUon6fyYOHsslJI5VKLqhMM0Sm%252BW1EE%252B%252FPEJ%252BXcn%252FPS1My%252BI1lExuF1R1hFEZScEsUCG%252Bx%252BVIFB9bzs1IoLC%252Baw%253D%253D

任何帮助将不胜感激,谢谢!


这个问题似乎是基本的查询字符串相关问题。 您的问题中没有关于样本期望值和样本实际值的提示。因此我无法在这里为您提供确切的答案。但下面两个是一定可以解决这个问题的指针。

可能有两个问题:

问题1:HtmlDecode/UrlDecode后未恢复原始Base-64

这些标记被编码为 Base 64 字符串,其中可能包含“+”等字符。

它们被发送到服务器。

然后服务器尝试对此字符串执行 HtmlDecode 操作,以删除原始 Base 64 令牌中实际存在的字符。

例如。 '+' 被空字符串替换。

因此,WebUtility.HtmlDecode之后生成的令牌是无效的。这就是为什么你会收到无效令牌错误的原因

How to check this ?可以调试一下,看看HtmlDecode后的值是多少,期望值是多少。如果它们不同,那么这就是根本原因。

问题 2:查询字符串格式不正确

查询字符串中的多个键值对使用“&”字符连接。 例如键1=值1&键2=值2

但有时而不是&,其编码版本&amp;出现在查询字符串中。
例如键1=值1&键2=值2

如果是这种情况,.Net 服务器将无法正确解析查询字符串。

How to check this ?您可以使用 QueryString 属性直接从 HttpContext 或 HttpRequest 读取原始查询字符串,并检查是否是这种情况。如果是,那么您可以更改客户端以发送适当的查询字符串(更具逻辑性和可维护性)或编写一些代码以在服务器端更正它。

这些指示应该可以帮助您解决问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Asp.net Core 电子邮件确认有时会显示 InvalidToken 的相关文章

  • 如何在C(Linux)中的while循环中准确地睡眠?

    在 C 代码 Linux 操作系统 中 我需要在 while 循环内准确地休眠 比如说 10000 微秒 1000 次 我尝试过usleep nanosleep select pselect和其他一些方法 但没有成功 一旦大约 50 次 它
  • 如何判断计算机是否已重新启动?

    我曾经使用过一个命令行 SMTP 邮件程序 作为试用版的限制 它允许您在每个 Windows 会话中最多接收 10 封电子邮件 如果您重新启动计算机 您可能还会收到 10 个以上 我认为这种共享软件破坏非常巧妙 我想在我的应用程序中复制它
  • 对 std::vector 进行排序但忽略某个数字

    我有一个std vector
  • 在Linux中,找不到框架“.NETFramework,Version=v4.5”的参考程序集

    我已经设置了 Visual studio 来在我的 Ubuntu 机器上编译 C 代码 我将工作区 我的代码加载到 VS 我可以看到以下错误 The reference assemblies for framework NETFramewo
  • SQL服务器超时

    我的应用程序是在经典 asp 上开发的 但也使用 asp net 因为我正在将应用程序迁移到 Net 上 它使用 SQL Server 作为数据库并托管在 Windows Server 2003 上 现在的问题是应用程序在很长一段时间内继续
  • 如何在 Qt 应用程序中通过终端命令运行分离的应用程序?

    我想使用命令 cd opencv opencv 3 0 0 alpha samples cpp cpp example facedetect lena jpg 在 Qt 应用程序中按钮的 clicked 方法上运行 OpenCV 示例代码
  • ASP Identity CoreGeneratePasswordResetTokenAsync 已过期

    我已经在 NET Core 2 1 中设置了一个 Identity Server 4 项目 一切正常 但是当我使用用户管理器生成重置密码令牌时 令牌在 24 小时后过期 我可以将其更改为 48 小时吗 我发送重置令牌的代码如下所示 var
  • 如何在 C 中安全地声明 16 位字符串文字?

    我知道已经有一个标准方法 前缀为L wchar t test literal L Test 问题是wchar t不保证是16位 但是对于我的项目 我需要16位wchar t 我还想避免通过的要求 fshort wchar 那么 C 不是 C
  • 为什么这个二维指针表示法有效,而另一个则无效[重复]

    这个问题在这里已经有答案了 这里我编写了一段代码来打印 3x3 矩阵的对角线值之和 这里我必须将矩阵传递给函数 矩阵被传递给指针数组 代码可以工作 但问题是我必须编写参数的方式如下 int mat 3 以下导致程序崩溃 int mat 3
  • 有没有办法在 ASP.net 中制作像 gmail 那样的进度条?

    有没有办法在 ASP net 中制作像 gmail 那样的进度条 以下是一些基于 ASP NET 的进度栏控件 ASP NET AJAX 进度条控件 http mattberseth com blog 2008 05 aspnet ajax
  • WPF DataGridTemplateColumn 组合框更新所有行

    我有这个 XAML 它从 ItemSource 是枚举的组合框中选择一个值 我使用的教程是 http www c sharpcorner com uploadfile dpatra combobox in datagrid in wpf h
  • 在屏幕上获取字符

    我浏览了 NCurses 函数列表 似乎找不到返回已打印在屏幕上的字符的函数 每个字符单元格中存储的字符是否有可访问的值 如果没有的话Windows终端有类似的功能吗 我想用它来替换屏幕上某个值的所有字符 例如 所有a s 具有不同的特征
  • C++ new * char 不为空

    我有一个问题 我在 ASIO 中开发服务器 数据包采用尖头字符 当我创建新字符时 例如char buffer new char 128 我必须手动将其清理为空 By for int i 0 i lt 128 i buffer i 0x00
  • OpenGL:仅获取模板缓冲区而没有深度缓冲区?

    我想获取一个模板缓冲区 但如果可能的话 不要承受附加深度缓冲区的开销 因为我不会使用它 我发现的大多数资源表明 虽然模板缓冲区是可选的 例如 排除它以利于获得更高的深度缓冲区精度 但我还没有看到任何请求并成功获取仅 8 位模板缓冲区的代码
  • 将数组作为参数传递

    如果我们修改作为方法内参数传递的数组的内容 则修改是在参数的副本而不是原始参数上完成的 因此结果不可见 当我们调用具有引用类型参数的方法时 会发生什么过程 这是我想问的代码示例 using System namespace Value Re
  • 实体框架中的“it”是什么

    如果以前有人问过这个问题 请原谅我 但我的任何搜索中都没有出现 它 我有两个数据库表 Person 和 Employee 对每个类型的表进行建模 例如 Employee is a Person 在我的 edmx 设计器中 我定义了一个实体
  • 使用 C 在 OS X 中获取其他进程的 argv

    我想获得其他进程的argv 例如ps 我使用的是在 Intel 或 PowerPC 上运行的 Mac OS X 10 4 11 首先 我阅读了 ps 和 man kvm 的代码 然后编写了一些 C 代码 include
  • 我可以在“字节数”设置为零的情况下调用 memcpy() 和 memmove() 吗?

    当我实际上没有什么可以移动 复制的时候 我是否需要处理这些情况memmove memcpy 作为边缘情况 int numberOfBytes if numberOfBytes 0 memmove dest source numberOfBy
  • 为boost python编译的.so找不到模块

    我正在尝试将 C 代码包装到 python 中 只需一个类即可导出两个函数 我编译为map so 当我尝试时import map得到像噪音一样的错误 Traceback most recent call last File
  • Objective-C / C 给出枚举默认值

    我在某处读到过关于给枚举默认值的内容 如下所示 typedef enum MarketNavigationTypeNone 0 MarketNavigationTypeHeirachy 1 MarketNavigationTypeMarke

随机推荐

  • 如何:点击时将视图置于前面;设置最大/最小捏合手势比例;将屏幕限制设置为平移手势

    注意 我发现的所有东西都太旧了 或者与我实际需要的东西相差太大 而且我几乎尝试了我发现的所有东西 但没有一个能以正确的方式工作 我创建了 3 个 UIView 我可以拖动它们并缩放它们 现在 我需要 将其中一些放在前面 我想为每个添加一个
  • 使用owin中间件替换响应体

    有没有办法使用 OWIN 中间件覆盖响应内容 我的自定义错误类 public class Error public string error get set public string description get set public
  • RxJs - forkJoin 与空数组

    我目前正在使用forkJoin等待数组Observable s 之前完成pipe 英 和tap ping 我注意到如果数组为空 则不会发出任何信号 我什至不能tap 我该如何解决这种问题 我应该检查数组是否为空吗 myFirstFuncti
  • AspNetCore 2.0 声明始终为空

    我正在努力将 DotNet 4 5 MVC WebAPI 应用程序转换为 AspNetCore 2 0 但在让 Cookie 身份验证再次工作时遇到一些问题 当我设置 cookie 并尝试访问安全方法时 我无法到达那里 当我进入匿名方法并检
  • 空比较

    有一个查询 UPDATE MyTable SET nvarchar1 blahblah WHERE Id 096fe792 7313 416f b3c8 327f46be73b6 AND nvarchar1 lt gt blablah 当
  • 使用 Delphi 检测互联网连接激活

    我使用 3G 无线卡已经有一段时间了 每次连接时 我的防病毒软件都会启动更新 我想知道我可以使用哪些 Win32 API 函数集来获取通知或查询即将出现的 Internet 连接事件 Delphi 已经有一组移植的标头了吗 我参与了一个项目
  • 如何将无边框表单对齐到屏幕边缘?

    当我将窗体的边框样式设置为无时 我无法再将窗口捕捉到屏幕边缘 我怎样才能两者兼得 Aero Snap 需要一个有边框的窗口 没有后门 您可以使用以下代码来模拟捕捉这个帖子 https stackoverflow com a 591734 1
  • ruby/ruby on Rails 内存泄漏检测

    我使用 ruby on Rails 编写了一个小型 Web 应用程序 其主要目的是上传 存储和显示 xml 文件最多可达几 MB 文件的结果 运行大约 2 个月后 我注意到杂种进程使用了 大约 4GB 内存 我做了一些关于调试 ruby 内
  • 单页网站上复杂的活动状态导航

    HTML div class logo ribbon a href top a div
  • 为什么用 p.then(resolve) 比用resolve(p) 更早地解决新的 Promise?

    Code 1 和 Code 2 之间的区别是 Code 1 使用resolve p 和代码 2 使用p then gt resolve 我希望输出的序列是不变的 但它们会生成不同的序列 我不明白为什么 代码 1 resolve p cons
  • javac 类路径顺序与 Oracle 文档相矛盾?

    In 塞拉 贝茨 SCJP https rads stackoverflow com amzn click com 0071591060本书第 797 页 java 和 javac 首先查看包含 Java SE 标准类的目录 然后他们查看类
  • AJAX 按钮提交的 HTML5 表单验证

    我有以下表格 我喜欢新的 HTML5 表单验证 并且更愿意保留它 然而 我不喜欢按下按钮时刷新页面 表单提交 的方式 相反 我更愿意使用按钮触发一些 AJAX 来刷新页面元素 而不刷新整个页面 然而 当我设置type button 发生的情
  • Android - 使用 LocationManager.requestLocationUpdates 时,我需要 WakeLock 吗?

    我的应用程序使用警报定期检查位置BroastcastReceiver启动一个服务 我知道我应该在启动服务之前获取唤醒锁 但我的问题是我什么时候可以释放它 如果我在调用后释放唤醒锁requestLocationUpdates 设备是否可以进入
  • 将一次性代码交换为刷新令牌时出现 Google OAuth redirect_uri_mismatch

    我正在实现 Google OAuth2 服务器一次性代码流程 如下所述 https developers google com identity sign in web server side flow https developers g
  • 如何处理 iOS 中的 Firebase 数据库错误? #AskFirebase

    我需要以不同于所有其他错误的方式处理 权限被拒绝 错误 在 Android 中我已经做到了 Kotlin override fun onCancelled error DatabaseError if error code Database
  • AVAudioPlayer 声音未播放

    在 iOS 8 Xcode 6 中 我有一个包含声音效果的功能 多次更改代码后 它在 iOS 9 中不再起作用 这是我尝试过的 原来的 let bangSoundEffect SKAction playSoundFileNamed Bang
  • Android Studio 2 错误:app:compileDebugJavaWithJack

    这是 Android Studio 2 1 1 的完整错误 我知道这段代码可以编译 因为在其他 PC 上它可以编译 但在 Windows 10 x64 的这台 PC 上却不行 所有其他项目都以类似的结果失败 Error Execution
  • php代码到mysql数据库导出[重复]

    这个问题在这里已经有答案了 可能的重复 最佳实践 在 PHP 中导入 mySQL 文件 分割查询 https stackoverflow com questions 1883079 best practice import mysql fi
  • hibernate 主键的原语或包装器

    我一直在查看各种 hibernate 教程和示例 对于它们的标识 主键属性 有些使用 Java 原始类型 有些使用包装类型 即 private int id vs private Integer id 为什么以及何时使用其中一个作为实体键
  • Asp.net Core 电子邮件确认有时会显示 InvalidToken

    我正在使用 asp net core Identity 2 1 我遇到了电子邮件确认的随机问题 而电子邮件确认有时会说结果 Error InvalidToken 令牌也没有过期 Note 我们正在使用多个服务器 并且我们还将密钥存储在一个地