Devise_invitable:成功邀请编辑时出现错误的Flash

时间:2014-06-10 14:10:26

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

Gemfile:

gem 'devise',           '>= 2.0.0'
gem 'devise_invitable', '~> 1.3.4'

访问/invitation/accept.XX?invitation_token=XXXXXXXX的用户使用以下表单成功设置了密码:

<%= form_for resource, :as => resource_name, :url => invitation_path(resource_name), :html => { :method => :put } do |f| %>
  <%= devise_error_messages! %>
  <%= f.hidden_field :invitation_token %>

  <p><%= f.label :password %><br />
  <%= f.password_field :password %></p>

  <p><%= f.label :password_confirmation %><br />
  <%= f.password_field :password_confirmation %></p>

  <p><%= f.submit t("devise.invitations.edit.submit_button"), class:'btn btn-inverse' %></p>
<% end %>

成功后,他们会获得signed_in并重定向到目标网页,但是他们会收到位于以下位置的Flash消息:

en:  
 devise:  
  invitations:  
   invitation_token_invalid: 'The invitation token provided is not valid!'

知道为什么会这样吗?

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,不确定问题的原因。我在登录后修改了设计重定向,这导致我的应用程序尝试第二次接受邀请。这会导致错误:&#39;提供的邀请令牌无效!&#39;因为DeviseInvitable会在用户第一次成功接受邀请后删除invitation_token。

我的问题代码是:

def after_sign_in_path_for(resource_or_scoped)
  session[:previous_url] || root_path
end

答案 1 :(得分:1)

@Steve是正确的,因为该行也是导致此错误的原因。特别是它的session[:previous_url]

以下是我的解决方法,为我解决了这个问题。

<强>的routes.rb

devise_for :users, controllers: { invitations: 'users/invitations' }

用户:: InvitationsController

module Users
  class InvitationsController < Devise::InvitationsController
    def after_accept_path_for(resource)
      root_path # you can define this yourself. Just don't use session[:previous_url]
    end
  end
end

基本上,默认行为是在资源接受邀请后使用after_sign_in_path_for作为路径。上述解决方案只是覆盖了默认行为。您可以查看docs以获取更多信息。