Используя rails, devise и cancan, вошедший в систему пользователь может получить доступ к путям входа и регистрации - PullRequest
2 голосов
/ 14 января 2012

Я не уверен, что я сделал, но вошедший в систему пользователь может получить доступ к new_user_session_path и new_user_registration_path.Обычно при разработке пользователю не следует разрешать доступ к этим путям.Я использую канкан, если что-то меняет.Я создал новое приложение rails, скопировал маршруты и расширил контроллер регистрации и сеансов и не могу воспроизвести проблему.

Если бы кто-то даже мог указать мне в направлении, где перенаправление выполняется в Devise, я быцените это.

В файле конфигурации initializers / devise.rb единственная строка, добавляемая в файл по умолчанию:

config.scoped_views = true

Дайте мне знать, если я смогу предоставить любую другую полезную информацию.Я использую Devise (1.5.3), CanCan (1.6.7) и Rails (3.1.1)

Файл маршрутов:

MyApp::Application.routes.draw do

  devise_for :users, :controllers => { :sessions => "sessions", :registrations => "registrations" }, :skip => [ :sessions, :registations ] do

    get    '/signin'   => 'sessions#new',     :as => :new_user_session
    post   '/signin'   => 'sessions#create',  :as => :user_session
    delete '/signout'  => 'sessions#destroy', :as => :destroy_user_session

    get    '/signup'       => 'registrations#new',    :as => :new_user_registration
    post   '/users'        => 'registrations#create', :as => :user_registration
    get    '/users/cancel' => 'registrations#cancel', :as => :cancel_user_registration
    get    '/settings'     => 'registrations#edit',   :as => :edit_user_registration

    put    '/account'      => 'registrations#update'
    delete '/users'        => 'registrations#destroy'
  end

  resources :users

  match '/contact',   :to => 'pages#contact'

  root :to => 'pages#contact'

end

Контроллер расширенных регистраций Devise

class RegistrationsController < Devise::RegistrationsController

  # POST /resource
  def create
    build_resource

    resource.company = Company.find_by_code(params[:company_code])
    resource.role = Role.find_by_name("Basic")

    if resource.save
      if resource.active_for_authentication?
        set_flash_message :notice, :signed_up if is_navigational_format?
        sign_in(resource_name, resource)
        respond_with resource, :location => after_sign_up_path_for(resource)
      else
        set_flash_message :notice, :inactive_signed_up, :reason => inactive_reason(resource) if is_navigational_format?
        expire_session_data_after_sign_in!
        respond_with resource, :location => after_inactive_sign_up_path_for(resource)
      end
    else
      clean_up_passwords resource
      respond_with resource
    end
  end

end

Контроллер расширенных сессий Devise:

class SessionsController < Devise::SessionsController
  layout "sessions"
end

Я понимаю, что могу добавить некоторый код в действия контроллера или в фильтр до, чтобы проверить вошедшего в систему пользователя и перенаправить его.Devise, однако, предлагает функциональность, и я не должен был этого делать.Я боюсь, что, делая это, я могу игнорировать большую проблему, возможно, с конфигурацией Devise.

Я ценю любую помощь!Спасибо!

Ответы [ 2 ]

1 голос
/ 15 января 2012

для устройства 1.5.3; на самом деле это не ответ, но некоторые указания на то, что происходит под капотом.
Фильтр, который используется для перенаправления при входе пользователя в систему: require_no_authentication .
Он уже вызывается в сеансах devises и регистрациях контроллерах.
Поскольку вы расширяете эти контроллеры, а фильтры наследуются, вам следует применить это поведение.

Некоторые возможные действия:

  • добавить точки останова, чтобы увидеть, называется ли фильтр или нет
  • анализирует контроллеры в консоли, чтобы увидеть, зарегистрированы ли фильтры
  • проверить поток управления фильтра; ты возился с Devise.navigational_formats
  • двойная проверка версии устройства
0 голосов
/ 29 мая 2012

После долгих поисков и попыток, я решил заново реализовать устройство, и это помогло.Я все еще не уверен, как мне удалось сломать функциональность в первую очередь.

...