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 %>

В случае успеха они получают sign_in и перенаправляются на нужную страницу, однако получают флэш-сообщение, расположенное в:

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

Любая идея, почему так?


person Victor Martin    schedule 10.06.2014    source источник


Ответы (2)


Я столкнулся с той же проблемой, не уверен, что причина вашей проблемы. Я изменил перенаправление устройства после входа в систему, из-за чего мое приложение попыталось принять приглашение во второй раз. Это вызывает ошибку: «Предоставленный токен приглашения недействителен!» поскольку DeviseInvitable удаляет приглашение_токен после того, как пользователь успешно примет приглашение в первый раз.

Мой код проблемы был:

def after_sign_in_path_for(resource_or_scoped)
  session[:previous_url] || root_path
end
person Steve    schedule 19.07.2014

@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 в качестве пути после того, как ресурс примет приглашение. Приведенное выше решение просто переопределяет это поведение по умолчанию. Дополнительную информацию можно найти в документах.

person Justin    schedule 13.09.2014
comment
Это была именно моя проблема! Весь день копался в интернете. СПАСИБО ВАМ БОЛЬШОЕ, ЧТО ВЫ ЕСТЬ. Кроме того, было бы полезно включить это в документацию gem для devise_invitable, да? - person nilatti; 14.05.2016
comment
Рад, что вы смогли решить свою проблему. Я полагаю, что это уже есть в документах в третьем абзаце в разделе "Интеграция в Приложение Rails. - person Justin; 14.05.2016
comment
Теперь, когда я знаю, что это такое, я согласен. Включение конкретной ошибки облегчило бы понимание. - person nilatti; 27.05.2016