devise_invitable不再能够接受邀请(但通过控制台工作)

时间:2015-10-15 08:57:08

标签: ruby-on-rails ruby-on-rails-4 devise ruby-on-rails-4.2 devise-invitable

我正在使用devise_invitable创建访客帐户来访问文档。访问文档时,访客可以单击将升级到完整帐户的升级按钮。点击升级按钮即可接受devise_invitable邀请。

以前工作:不再工作。

环境:

  • rails 4.2.3(最近升级)
  • 设计3.4.1
  • devise_invitable 1.3.6

我为生成升级链接的访客用户使用标题部分:

<% @invite_link = accept_user_invitation_url(invitation_token: @invite_token) %>
<%= link_to "Upgrade", @invite_link, class: "btn btn-danger btn-lg" %>

@invite_token的创建方式如下:

user = current_user
user.invite! do |u|
  u.skip_invitation = true
end
@invite_token = user.raw_invitation_token

所以link_to助手会产生类似:https://myapp/users/invitation/accept?invitation_token=vv_JqeFDLfyX65tx2KhR

的内容

除非点击链接,否则我需要:https://myapp/users/sign_in

显示错误消息:The invitation token provided is not valid!

日志报告如下:

Started GET "/users/invitation/accept?invitation_token=vv_JqeFDLfyX65tx2KhR" for 31.15.32.222 at 2015-10-15 19:18:34 +1100
Processing by Devise::InvitationsController#edit as HTML
  Parameters: {"invitation_token"=>"vv_JqeFDLfyX65tx2KhR"}
  User Load (5.9ms)  SELECT  "users".* FROM "users" WHERE "users"."invitation_token" = $1  ORDER BY "users"."id" ASC LIMIT 1  [["invitation_token", "ea9be9890c684e13ece13ec02f89bade81fcd3ac1fb982db72d8f8561d0cf289"]]
Redirected to https://myapp/
Filter chain halted as :resource_from_invitation_token rendered or redirected
Completed 302 Found in 53ms (ActiveRecord: 5.9ms)
Started GET "/" for 31.15.32.222 at 2015-10-15 19:49:52 +1100
Processing by PagesController#index as HTML
Redirected to https://myapp/users/sign_in
Completed 302 Found in 11ms (ActiveRecord: 0.0ms)

能够通过rails控制台实现此功能。

如果我并行运行rails console,我可以逐步执行上述步骤并生成一个按预期工作的accept_invitation链接(即它会提示用户为完整帐户设置密码)。

注意:rails raw_invitation_token在rails控制台会话中有所不同。

我错过了什么?

1 个答案:

答案 0 :(得分:0)

我发现代码在显示页面时调用user.invite!生成raw_invitation_token ,在生成accept_invitation链接后生成。这意味着accept_invitation链接中的令牌现在已经过时了。

通过控制台,此代码未被调用,因为没有控制器,视图或javascript组件被调用。因此,在使用控制台时,事情按预期工作。

已修复且全部恢复正常。