0

宝石文件:

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!'

知道为什么吗?

4

2 回答 2

1

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

我的问题代码是:

def after_sign_in_path_for(resource_or_scoped)
  session[:previous_url] || root_path
end
于 2014-07-19T03:12:41.467 回答
1

@Steve 是正确的,因为那条线也是导致我这个错误的原因。特别是,它的session[:previous_url].

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

路线.rb

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

用户::邀请控制器

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用作资源接受邀请后的路径。上述解决方案只是覆盖了该默认行为。您可以查看文档以获取更多信息。

于 2014-09-13T18:25:04.753 回答