2012-01-14 2 views
2

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

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

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

config.scoped_views = true 

Позвольте мне знать, если я могу поставить любую другую полезную информацию. Я использую Завещание (1.5.3), Канкан (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 

Extended Разрабатывают зарегистрирования Контроллер

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 

Расширенная Разрабатывают Сессии контроллер:

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

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

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

+0

«Придумайте, однако, что предлагает функциональность», откуда вы это знаете? Где он говорит? – clyfe

+0

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

ответ

0

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

1

Для разработки 1.5.3; на самом деле не ответ, а некоторые указатели на то, что происходит под капотом.
Фильтр, который используется для перенаправления при входе пользователя, равен require_no_authentication.
Он уже вызывается в контроллерах sessions и registrations.
Поскольку вы продлеваете эти контроллеры и фильтры наследуются, вы должны применять поведение.

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

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

Спасибо, clyfe. У меня такая же проблема (доступ к «users/sign_in»), когда я удаляю контроллер сессий и удаляю маршруты. Теперь я использую версию 1.8.11 с той же проблемой. – Retistic

+0

Я не думаю, что коснулся навигационных форматов – Retistic

Смежные вопросы