Проблема Devise и current_user при использовании пространства имен - PullRequest
1 голос
/ 17 ноября 2011

На основном веб-сайте я использую стандартную конфигурацию Devise для аутентификации пользователя.В rout.rb:

devise_for :users

Теперь у меня есть пространство имен, давайте назовем его «frame», которое используется для отображения некоторых представлений через некоторые контроллеры в небольшом окне (или iframe) на удаленной странице.Мне нужно аутентифицировать пользователя внутри фрейма, поэтому я вложил объявление devise_for:

namespace :frame do
  devise_for :users
  resources :albums, :only => :show do
    resources :photos, :only => [:new, :create, :show]
  end
end

Чтобы все это работало, мне нужно было создать соответствующий контроллер:

class Frame::SessionsController < ::Devise::SessionsController
  layout "frame"
end

И теперь я используюследующий путь для отображения формы:

new_frame_user_session_path

ОДНАКО.Когда я вошел через фрейм, * current_user * равен nil, и вместо этого у меня есть * current_frame_user *.Это плохо, потому что пользователь, вошедший в систему через основной веб-сайт (* current_user *), должен быть доступен через фрейм и обратно (в одном браузере).

Есть ли небольшая настройка для достижения этого, или я должен изменить весь подход?Спасибо за помощь.

1 Ответ

2 голосов
/ 23 ноября 2011

Решение было для меня изменить форму входа в систему в views / frame / session / new.html.haml .

Вместо:

= simple_form_for resource, :as => resource_name, :url => session_path(resource_name) do |f|

Мне нужно перезаписать имя ресурса:

= simple_form_for resource, :as => :user, :url => session_path(:user) do |f|

Теперь я могу войти в систему во фрейме, и сеанс пользователясвязь между фреймом и остальной частью сайта.

...