Rails 4 devise_invitable 邀请令牌无效

2023-12-31

我一直在关注Ryan Boland 的优秀 Rails 多租户教程 https://www.youtube.com/watch?v=nXqwFEjxyhM,但遇到了 devise_invitable 的问题。我在用...

Rails 4.1.5 
devise 3.3.0  
devise_invitable 1.3.6
Postgresql

我在选定的子域 (mysubdomain.lvh.me:3000) 上创建一个新帐户和用户/帐户所有者,我可以从中发送用户邀请。我在隐身 Chrome 会话中打开邀请链接,以确保我没有登录或没有任何当前会话。单击邀请链接后,我将被重定向到登录页面 (mysubdomain.lvh.me:3000/users/sign_in) 并看到一条闪烁通知:“提供的邀请令牌无效!”

我正在使用一个非常简单的邮件程序视图(app/views/devise/mailer/invitation_instructions.html.erb)...

<%= link_to 'Accept invitation', accept_invitation_url(@resource, :invitation_token => @token) %>

如您所见,我确保使用@token,如所述here https://github.com/scambra/devise_invitable/issues/410.

创建邀请后,我已确认邀请令牌已保存到数据库中(在本例中为[电子邮件受保护] /cdn-cgi/l/email-protection- d1801fd8df78bd8cd125d5d8091fdc6a72c8f8faf4136cb282d497ec612195e9)。我已确认这与接受请求时查找邀请时的令牌相匹配(请参阅下面的跟踪)。尽管如此,它仍然重定向到用户登录页面而不是完成注册,并且还在跟踪日志中显示“过滤器链因:resource_from_invitation_token 呈现或重定向而停止”。此笔交易后,用户最终仍处于未确认状态。

关于我这里可能出什么问题有什么想法吗?我在下面包括日志、我的应用程序控制器和我的设备配置...

以下是邀请创建的跟踪日志:

Started POST "/users/invitation" for 127.0.0.1 at 2014-09-07 01:28:33 +0800
Processing by Devise::InvitationsController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"BiIQ95wwdQz3CJ0+OoLOE9xHHvxhloHsRHrxsqf1D2Q=", "user"=>{"email"=>"[email protected] /cdn-cgi/l/email-protection"}, "commit"=>"Invite User"}
  User Load (4.1ms)  SELECT  "users".* FROM "users"  WHERE "users"."id" = 1  ORDER BY "users"."id" ASC LIMIT 1
  Account Load (0.4ms)  SELECT  "public"."accounts".* FROM "public"."accounts"  WHERE "public"."accounts"."subdomain" = 'mysubdomain' LIMIT 1
  User Load (0.7ms)  SELECT  "users".* FROM "users"  WHERE "users"."email" = '[email protected] /cdn-cgi/l/email-protection'  ORDER BY "users"."id" ASC LIMIT 1
  User Load (0.7ms)  SELECT  "users".* FROM "users"  WHERE "users"."invitation_token" = 'd1801fd8df78bd8cd125d5d8091fdc6a72c8f8faf4136cb282d497ec612195e9'  ORDER BY "users"."id" ASC LIMIT 1
   (0.1ms)  BEGIN
  SQL (0.5ms)  INSERT INTO "users" ("created_at", "email", "invitation_created_at", "invitation_sent_at", "invitation_token", "invited_by_id", "invited_by_type", "updated_at") VALUES ($1, $2, $3, $4, $5, $6, $7, $8) RETURNING "id"  [["created_at", "2014-09-06 17:28:34.296123"], ["email", "[email protected] /cdn-cgi/l/email-protection"], ["invitation_created_at", "2014-09-06 17:28:34.294987"], ["invitation_sent_at", "2014-09-06 17:28:34.294987"], ["invitation_token", "d1801fd8df78bd8cd125d5d8091fdc6a72c8f8faf4136cb282d497ec612195e9"], ["invited_by_id", 1], ["invited_by_type", "User"], ["updated_at", "2014-09-06 17:28:34.296123"]]
   (2.2ms)  COMMIT
  Rendered devise/mailer/invitation_instructions.html.erb (1.3ms)

Devise::Mailer#invitation_instructions: processed outbound mail in 23.5ms

Sent mail to [email protected] /cdn-cgi/l/email-protection (26.0ms)
Date: Sun, 07 Sep 2014 01:28:34 +0800
From: [email protected] /cdn-cgi/l/email-protection
Reply-To: [email protected] /cdn-cgi/l/email-protection
To: [email protected] /cdn-cgi/l/email-protection
Message-ID: <...>
Subject: Invitation instructions
Mime-Version: 1.0
Content-Type: text/html;
 charset=UTF-8
Content-Transfer-Encoding: 7bit

<a href="http://mysubdomain.lvh.me:3000/users/invitation/accept?invitation_token=3GXDmi7NntDRdhvo57q5">Accept invitation</a>
Redirected to http://mysubdomain.lvh.me:3000/users
Completed 302 Found in 888ms (ActiveRecord: 10.0ms)

这是点击邀请链接后的跟踪...

Started GET "/users/invitation/accept?invitation_token=3GXDmi7NntDRdhvo57q5" for 127.0.0.1 at 2014-09-07 01:28:38 +0800
Processing by Devise::InvitationsController#edit as HTML
  Parameters: {"invitation_token"=>"3GXDmi7NntDRdhvo57q5"}
  User Load (0.6ms)  SELECT  "users".* FROM "users"  WHERE "users"."invitation_token" = 'd1801fd8df78bd8cd125d5d8091fdc6a72c8f8faf4136cb282d497ec612195e9'  ORDER BY "users"."id" ASC LIMIT 1
Redirected to http://mysubdomain.lvh.me:3000/users/sign_in
Filter chain halted as :resource_from_invitation_token rendered or redirected
Completed 302 Found in 5ms (ActiveRecord: 0.6ms)


Started GET "/users/sign_in" for 127.0.0.1 at 2014-09-07 01:28:38 +0800
Processing by Devise::SessionsController#new as HTML
  Account Load (0.4ms)  SELECT  "public"."accounts".* FROM "public"."accounts"  WHERE "public"."accounts"."subdomain" = 'mysubdomain' LIMIT 1
  Rendered devise/shared/_links.erb (0.7ms)
  Rendered devise/sessions/new.html.erb within layouts/application (4.4ms)
Completed 200 OK in 21ms (Views: 16.6ms | ActiveRecord: 1.3ms)

这是我的 application_controller 的良好措施......

class ApplicationController < ActionController::Base
  # Prevent CSRF attacks by raising an exception.
  # For APIs, you may want to use :null_session instead.
  protect_from_forgery with: :exception
  before_filter :load_schema, :authenticate_user!, :set_mailer_host
  before_filter :configure_permitted_parameters, if: :devise_controller?


  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:first_name, :last_name, :company, :email, :password, :password_confirmation, :remember_me, :image, :image_cache)}
    devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:first_name, :last_name, :company, :email, :password_confirmation, :current_password, :image, :image_cache)}
  end

private
  def load_schema
    Apartment::Database.switch('public')
    return unless request.subdomain.present?

    if current_account
      Apartment::Database.switch(current_account.subdomain)
    else
      redirect_to root_url(subdomain: false)
    end
  end  

  def current_account
    @current_account ||= Account.find_by(subdomain: request.subdomain)
  end
  helper_method :current_account

  def set_mailer_host
    subdomain = current_account ? "#{current_account.subdomain}." : ""
    ActionMailer::Base.default_url_options[:host] = "#{subdomain}lvh.me:3000"
  end

  def after_sign_out_path_for(resource_or_scope)
    new_user_session_path
  end

  def after_invite_path_for(resource)
    users_path
  end

end

这是我的 Devise 初始化程序(config/initializers/devise.rb),我添加了“config.allow_insecure_token_lookup = true”行来查看这是否有帮助,但无济于事......

Devise.setup do |config|

  config.mailer_sender = '[email protected] /cdn-cgi/l/email-protection'

  require 'devise/orm/active_record'

  config.case_insensitive_keys = [ :email ]

  config.strip_whitespace_keys = [ :email ]

  config.skip_session_storage = [:http_auth]

  config.stretches = Rails.env.test? ? 1 : 10

  config.reconfirmable = true

  config.expire_all_remember_me_on_sign_out = true

  config.password_length = 8..128

  config.sign_out_via = :delete

  config.allow_insecure_token_lookup = true
end

我更愿意发表评论,但我只有 36 分并且不允许,所以这里是一个不完整的答案:

这是来自 devise_invitable InvitationsController 的代码,它正在重定向您的请求

def resource_from_invitation_token
  unless params[:invitation_token] && self.resource = resource_class.find_by_invitation_token(params[:invitation_token], true)
    set_flash_message(:alert, :invitation_token_invalid)
    redirect_to after_sign_out_path_for(resource_name)
  end
end

在你的 Rails 控制台中尝试运行:

token = '3GXDmi7NntDRdhvo57q5' #the token sent in the invitation email
User.find_by_invitation_token(token, true)

看看是否会返回您的用户。可能不会,但也许这会让您更接近答案。但愿如此。

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

Rails 4 devise_invitable 邀请令牌无效 的相关文章

  • 分别对用户和管理员进行身份验证

    class ApplicationController lt ActionController Base protect from forgery skip before filter authenticate user only gt w
  • 使用 Rails 进行 Paypal 自适应(链式)支付

    众所周知 PayPal 支持自适应 链式 支付 其中一个买家发送款项 并使用一个 API 帐户持有人进行处理 并且该款项可以发送给多个 用户 我的问题是 这个方法是否也支持 接受信用卡 对于 买方 是否可以抓卡 详细信息请访问我们的网站并使
  • Rails Partial (Rails 3, HAML) 任意慢

    我使用的是 Rails 3 0 1 HAML 0 3 22 和 Mongrel 1 1 5 MongoMapper 不是 AR 我正在渲染一个列表 每个列表项都是它自己的部分 每次页面渲染其中一个列表项部分时 渲染时间都会延长近 100 倍
  • 水豚找不到元标签

    Capybara 2 1 0 似乎没有找到任何元标记 rdb 1 p page find meta Capybara ElementNotFound Exception Unable to find css meta 即使他们出现在page
  • Rails 验证日期范围的唯一性

    我有一个涉及员工缺勤记录的应用程序 我需要确保每条记录的开始日期和结束日期不重叠 例如 如果我输入了从今天开始到明天结束的缺勤记录 则不可能以任何方式在该日期范围内输入另一个缺勤记录 所以我不能制作一个从前天开始 然后在后天或任何更晚的日期
  • Partial、Layout、Template 渲染问题

    情况 因此 当我访问页面时 我希望能够将布局应用到部分 我想要三个具有相同布局的部分 现在 我正在尝试使用以下命令来执行此操作 where shared services essay是这样的 p blah p div blah div
  • 在代码中的其他地方设计渲染符号=>向上/形式部分

    我刚刚开始使用 Devise 和 Rails3 我已经完成了身份验证并正在工作并了解基础知识 截至目前 在代表我的主页 首页的主控制器中 我有两个链接 一个链接到 注册 gt sign up 另一个链接根据登录 注销 gt sign in
  • 在 Rails 4 中渲染部分/rake 任务/后台作业/模型中的视图

    我读过很多关于在 rake 任务 后台作业 模型中渲染 Rails 部分和视图的内容 我在 Stackoverflow 和网络上找到的绝大多数内容都描述了在 Rails 3 中工作的方法 但它们似乎已经过时了 而且我没有让它们工作 即使花了
  • 如何使用 Ruby 2.7.0 修复 Rails 的警告消息

    有没有人解决这个问题Ruby 2 7 0 I used rbenv并安装了 Ruby v2 7 0 然后使用创建了一个 Rails 项目Rails v6 0 2 1 目前 通过运行之一 rails s rails s u puma rail
  • 从部分重定向回具有部分的同一页面后保留验证错误

    因此 我试图从我的表单中获取错误 该表单在我的 root path 中呈现为部分内容 在我尝试发布它但失败 或成功 后 我想重定向回 root path 但是 redirect to 决定不保存任何验证信息 想知道如何做到这一点 class
  • Rails Searchkick / Elasticsearch has_many 和belongs_to 关联

    我尝试使用 Searchkick 运行搜索并基于多个模型返回 我的书本模型包含这个 class Book lt ActiveRecord Base searchkick has many book subjects has many sub
  • 使用 Minitest 测试自定义验证器

    我有多个带有电子邮件验证的模型 因此 我将验证提取到自定义验证器中 我按照以下教程做到了这一点导轨指南 http guides rubyonrails org active record validations html custom va
  • 设备注册控制器获取零资源的自定义操作

    基本上我想要有两个单独的操作来更改密码和更改电子邮件 而不是只有一个 我已经更新了我的路由以指向继承自 Devise RegistrationsController 的新控制器 我的路线 rb devise for users contro
  • 如何创建与 ActiveResource 对象的 ActiveRecord 关系?

    假设我正在为一家已经拥有 People 应用程序的出版公司编写一个图书馆应用程序 所以在我的图书馆应用程序中我有 class Person lt ActiveResource Base self site http api people m
  • Ruby on Rails 3 - 为每个请求重新加载 lib 目录

    我正在为 Rails 3 应用程序创建一个新引擎 正如您所猜测的 该引擎位于我的应用程序的 lib 目录中 但是 我在开发它时遇到了一些问题 事实上 每次更改引擎中的某些内容时 我都需要重新启动服务器 有办法避免这种情况吗 我可以强制rai
  • save_and_open_page 已停止提供我的 CSS

    我的测试设置工作得很好 每当我打电话时 都能提供正确格式的 css 页面save and open page从测试中 然后 我设置了一些 javascript 测试 并对我的设置进行了一些更改 抱歉 我无法详细说明所有内容 我没有足够详细地
  • 使用复选框过滤列表

    我有一个电影列表及其评级 在我的页面顶部 我有一个表单 其中提供了一个复选框列表 其中显示了每个可用的评级 G PG 13 等 一旦用户单击复选框并点击提交 我只想显示所选的电影 在我的索引方法中 我有一个名为的实例变量 filtered
  • RSpec 请求规范发布一个空数组

    我目前正在 Rails 中开发 API 端点 如果我需要的数据无效 我想确保端点响应具有正确的错误状态 我需要一个 id 数组 无效值之一是空数组 Valid vendor district ids 2 4 5 6 Invalid vend
  • 有时您可能需要重新启动 Webrick 才能看到所做的更改,这是否正确?

    我听 Kevin Skoglund lynda com 说 养成在开发过程中频繁重新启动 Webrick 的习惯是一个很好的习惯 虽然通常您不需要重新启动 Webrick 来查看更改 但他暗示在某些特殊情况下可能需要这样做 有谁知道这些情况
  • 在 ActiveAdmin 或打印解决方案中动态更改分页

    我是 Activeadmin 和 Rails 的新手 我需要一些帮助 我有一个分页模型 我想允许用户更改分页值或完全禁用它 这样它就可以打印 到打印机 所有记录 或过滤后的记录 我知道我可以在 before filter 中使用 per p

随机推荐

  • WinRt 页面导航

    如何从自定义类内部的代码导航到页面 例如 假设我的 MainPage xaml cs 中有以下代码 private void DoSomething object sender RoutedEventArgs e var work new
  • Android 低内存杀手和应用程序后台堆栈

    当系统内存不足时 Android系统可能会决定删除某个应用程序进程 以便回收资源以进行更重要的工作 即启动属于另一个应用程序的服务 但是 我无法确定 Android 系统是否可以仅删除应用程序任务 返回堆栈 而不触及相应的应用程序进程 如果
  • 无法安装 deepface,因为软件包版本有冲突

    我正在尝试在 mac m1 上安装 deepface 我已经安装了tensorflow macos当前版本是2 5 0 但是当我尝试安装 deepface 时 它 说依赖项版本存在冲突 例如deepface 0 0 65 depends o
  • 如何在 SELECT FOR XML 查询中选择返回的列名?

    MS SQL 有一种方便的解决方法 可以将多行中的列值连接成一个值 SELECT col1 FROM table1 WHERE col2 x ORDER by col3 FOR XML path 这会返回一个很好的记录集 XML F52E2
  • 我们可以通过编程方式注销 Facebook吗

    我使用 facebook sdk 3 1 在我的 iphone 应用程序中进行 facebook 登录 登录后 它将进入我的应用程序 但我没有提供任何注销按钮 所以 当我们单击 facebook 登录按钮时 我将获得以前的用户 facebo
  • AS3:NetStream 的音频活动级别

    我 再次 抓狂 试图找到一种读取 NetStream 音频活动级别的方法 类似于使用麦克风执行此操作的方法 我不想让每个客户端通过 SharedObjects 等发送它的活动级别 这似乎是真正让它工作的唯一方法 非常感谢 Dave 在 AS
  • JSP“无法解决导入问题”

    我正在尝试从 JSP 页面调用 Java 类 我已经使用 JDeveloper 创建了该项目 我收到一条错误消息 无法解析导入 我已经在根文件夹的WEB INF中添加了Class文件 并尝试编译 但仍然显示相同的错误 下面是代码 p p
  • SQL 如何在多个分区上进行选择?

    有没有比以下更有效的方法 select from transactions partition partition1 union all select from transactions partition partition2 union
  • c# Linq to Objects - FirstOrDefault 性能

    我们正在尝试优化一些方法 我们使用 Redgate 的性能分析器来查找一些性能漏洞 我们的工具通过多种方法使用 Linq to 对象 但我们注意到 一个FirstOrDefault收集 1000 个对象需要很长时间 探查器还警告查询速度非常
  • 在 SparkSQL 中使用 Avro 模式和 Parquet 格式进行读/写

    我正在尝试从 SparkSQL 写入和读取 Parquet 文件 出于模式演变的原因 我想在写入和读取中使用 Avro 模式 我的理解是 这可以在 Spark 之外 或在 Spark 中手动 使用例如AvroParquetWriter 和
  • 旋转端口登陆Android4.X后如何避免智能手机中的剪切/复制/粘贴?

    我正在努力避免在智能手机中剪切 复制 粘贴 对于平板电脑来说没问题 它在端口模式下很好 但在陆地模式下 EditText 显示一个 下一步 按钮 选择文本后 下一个按钮将转换为具有复制 剪切和粘贴选项的编辑按钮 那么 当编辑按钮出现时 有什
  • Java 中条件运算符内部的转换

    这会在 Eclipse IDE 中出现错误 错误符号出现在行号附近 String allText null 之后我做了一些事情 比如初始化数组等等 但要根据一些条件 所以我想使用如下所示的条件运算符 List
  • 是否可以仅在加载所有模块后才显示 shell?

    我目前正在开发一个应用程序 该应用程序使用 PRISM 4 将其功能划分为不同的模块 我注意到我的应用程序的 Shell 在其区域中保存了模块的视图 在加载模块之前加载并显示 这意味着首先显示 Shell 然后在相当长的时间 大约半秒 之后
  • 不带括号和带括号调用函数有什么区别

    在 onPressed 或 Ontap 上调用不带括号的函数和带括号的函数有什么区别 我只知道在 onPressed 上不能用括号调用 void 函数 floatingActionButton FloatingActionButton on
  • mutate 是否通过引用更改 tbl?

    我真正喜欢的是什么data table is the 通过引用更改表的习惯用法 无需昂贵的副本 据我了解 这是使data table与其他方法相比 速度超快 现在 我开始玩dplyr包似乎具有同样的性能 但由于结果仍然必须使用 lt 操作员
  • java 中的同步 - 正确使用

    我正在构建一个在多进程 线程 中使用的简单程序 我的问题更容易理解 什么时候我必须使用保留字同步 我是否需要在影响骨骼变量的任何方法中使用这个词 我知道我可以将它放在任何非静态的方法上 但我想了解更多 谢谢你 这是代码 public cla
  • 导轨和主干一起工作

    我刚刚开始研究 MVC 结构 首先我看看如何backbone js工作了 现在我刚刚完成僵尸的轨道 http railsforzombies org 由代码学校提供 我知道我还没有深入研究这些内容 但我首先有一个问题 您可以一起使用这些库吗
  • 错误:操作数 1 处向量寄存器的使用无效

    我正在 64 位 Aarch64 设备上的 ARM 下学习 GCC 内联汇编器 我看到一条我不太明白的错误消息 来自 GCC 内联汇编器的错误消息 gcc DNDEBUG g3 O1 march armv8 a crc crypto tes
  • codeigniter 允许 uri 中使用特殊字符(例如:ä、é、î、ø、ù)

    如何在 codeigniter 的 uri 中允许特殊字符 例如 您不能直接在 URL 中使用特殊字符 RFC 1738 包含以下段落 URL 只用图形来写 US ASCII 的可打印字符 编码字符集 US ASCII 字符集中的字符列表可
  • Rails 4 devise_invitable 邀请令牌无效

    我一直在关注Ryan Boland 的优秀 Rails 多租户教程 https www youtube com watch v nXqwFEjxyhM 但遇到了 devise invitable 的问题 我在用 Rails 4 1 5 de