返回设备 3.1 中的设备确认令牌

2024-02-17

现在 Devise 已从数据库中删除了 :confirmation_token,我如何在 rspec 中返回 devise 确认令牌?

我试图通过使用确认令牌手动访问 user_confirmation 路径来测试可确认模块。我怎样才能实现这个目标?


莱昂纳多·平托(Leonardo Pinto)的非常有用的答案略有不同:

# Generate new raw/encrypted confirmation token pair and update database.
# This lets us visit the new "raw" path to confirm the user.
raw_confirmation_token, db_confirmation_token = 
  Devise.token_generator.generate(User, :confirmation_token)
User.last.update_attribute(:confirmation_token, db_confirmation_token)
visit user_confirmation_url(confirmation_token: raw_confirmation_token)

背景:如中所述这篇 Platformatec 博客文章 http://blog.plataformatec.com.br/2013/08/devise-3-1-now-with-more-secure-defaults/在“将摘要令牌存储在数据库中”下,Devise 3.1+ 向用户发送“原始”确认令牌,并将加密版本保存在数据库中。当用户单击原始链接时,原始令牌会在数据库中搜索之前重新加密。看send_confirmation_instructions and generate_confirmation_token在此源代码中:

https://github.com/plataformatec/devise/blob/master/lib/devise/models/confirmable.rb https://github.com/plataformatec/devise/blob/master/lib/devise/models/confirmable.rb

此代码生成一对新的原始令牌和加密令牌,用新的加密版本更新数据库中的最后一个用户,然后visit是原始版本。令牌应匹配并且帐户应得到确认。

虽然不在最初的问题中,但我也想测试 Devise 确认邮件中的正确链接,但我认为这是不可能的:当我创建用户时,确认电子邮件会立即发送,因此电子邮件的正文包含原始原始令牌,而不是此处生成的新令牌。

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

返回设备 3.1 中的设备确认令牌 的相关文章

随机推荐

  • 将 ReactforwardRef 与 Redux connect 结合使用

    我有一个正在使用的 React 功能组件forwardRef像这样 const wrapper React forwardRef props ref gt
  • Gradle - Android - 在应用程序审核中导致编译错误 - 放大旧依赖项

    我正在尝试集成 In App Review 但收到此编译错误 Duplicate class com google android play core common IntentSenderForResultStarter found in
  • 如何获取电脑的ID?

    vb net或java中有没有代码可以获取计算机的ID gt gt 我想编写一个可以获取计算机ID的程序 以便像微软那样制作软件许可证 提前致谢 Makara 首先 微软许可不是这样运作的 他们有一把在他们这边生成的钥匙 当他们向您出售该软
  • 如何在其自身事件中释放控件?

    我有一个清单TPanels在 FMX 应用程序中 如果我单击面板 我想释放它 直接在 Onclick 处理程序中释放它们不是正确的方法 因为我遇到了访问冲突 我不想使用windowsmessages 推荐于如何释放其事件处理程序内部的控制权
  • Python 3 中的整数除法 - 带有负数的奇怪结果[重复]

    这个问题在这里已经有答案了 我是Python新手 现在正在学习运算符 我明白 The 运算符用于floating point division and for integer division Example 7 3 2 And 7 3 3
  • 如何从十六进制值识别编码?

    我的网站上有这样显示的文本 o 代替 我从 CMS 中提取了文本并分析了它的十六进制值 正确显示的 有c3 b6 UTF 8 显示不正确的 有6f cc 88 我无法找出这是什么编码 识别编码的好方法是什么 6F是 o 的 UTF 8 AS
  • git中删除多个远程分支

    我有一位团队成员无意中将超过 150 个当地分支机构推送到我们的中央存储库 值得庆幸的是 它们都有相同的前缀 使用该前缀 是否有一个 git 命令或很酷的小 shell 脚本我可以使用它来一次删除所有这些 使用以下命令删除所有分支PREFI
  • 片段间通信适用于嵌套片段吗?

    Android 开发者网站有一个很棒的文章 http developer android com training basics fragments communicating html关于如何使用接口进行通信 A Fragment及其托管
  • 将照片从 Android 应用上传到 Google Cloud Storage/App Engine - 非法字符“_”

    我在将照片从 Android 应用程序上传到 GCS 时遇到问题 我可以上传文本文件 但不能上传照片 我尝试过各种 mime 类型以及不同的 Base64 编码方法 decodeBase64 encodeBase64URLSafeStrin
  • Asp.net Core 2.0 与 .net Framework 4.6.1 - 找不到参考程序集 '.NETFramework/v4.6.1/Microsoft.CSharp.dll

    我最近将我的项目从asp net core 1 1升级到asp net core 2 0 并使用 Net Framework 4 6 1 来应用我们 应用程序在本地开发计算机上按预期工作 但是一旦使用 dotnetpublish 命令部署到
  • C# lambda 如何捕获变量

    为什么下面的代码会打印 11 两次 int i 10 Action fn1 gt Console WriteLine i i 11 Action fn2 gt Console WriteLine i fn1 fn2 输出 11 11 根据这
  • 无法生成时间戳:连接重置

    编译 adobe air 应用程序时出现以下错误 java Could not generate timestamp Connection reset 该应用程序几天前编译得很好 我不知道计算机的配置有任何变化 我将以下参数添加到 buil
  • Android BroadcastReceiver onReceive() 在 android 5.1.1 上调用两次,即使在一次注册之后

    我无法弄清楚下面的代码有什么问题 我还检查了两次注册接收者的情况 但事实也并非如此 或者可能是我遗漏了一些东西 请帮忙 我真的很需要它 import android app Service import android content Br
  • 如何使用php数组将sql查询结果转换为数据透视表?

    我正在尝试为图书馆预订系统创建一些统计数据 我的 sql 查询的结果类似于以下结构 total no students department property month 241 Physics undergraduate Nov 236
  • bash 提示符换行损坏

    我正在 OsX 上自定义 bash 提示符 以包含 git 分支以及分支状态的一些标记 这会打破换行 我知道我必须添加 和 来防止这个问题 https stackoverflow com questions 105349 bash prom
  • jquery:秒表

    我正在使用stopwatch我在这里找到的代码 http www kellishaver com projects stopwatch http www kellishaver com projects stopwatch function
  • 查找字符串中字符的所有位置

    我正在尝试使用非常基本的技能集查找 python 字符串中字符的所有索引号 例如 如果我有字符串 Apples are Excellent 并且我想找到字符串中 a 所在的位置 我理想的输出是 0 7 14 19 这些是字符串中出现 a 的
  • 无法再次绑定多部分标识符

    我正在尝试创建一个这样的存储过程 CREATE PROCEDURE dbo SP Name ID varchar 50 URL varchar 256 AS SELECT DISTINCT Table1 CID Table2 Name Ta
  • 如何从一个docker容器到另一个docker容器执行命令

    我正在创建一个应用程序 允许用户上传视频文件 然后对这些文件进行一些处理 我有两个容器 Nginx为网站提供服务的容器 用户可以在其中上传视频文件 视频处理容器具有FFmpeg并安装了一些其他处理工具 我想要实现什么 我需要容器 1 才能在
  • 返回设备 3.1 中的设备确认令牌

    现在 Devise 已从数据库中删除了 confirmation token 我如何在 rspec 中返回 devise 确认令牌 我试图通过使用确认令牌手动访问 user confirmation 路径来测试可确认模块 我怎样才能实现这个