2013-10-23 2 views
1

최근에 v0.5.1에서 ActiveAdmin을 업그레이드했습니다. v.0.6.2. 생성기를 실행하여 구성을 업그레이드하고 설정을 기존 파일과 병합했습니다.ActiveAdmin을 v.0.6.2로 업그레이드 한 후 RoutingError

rails generate active_admin:install User 

ActiveAdmin 인터페이스가 작동하는 것 같습니다. 그러나 이전에는 작동했던 사양을 더 이상 성공적으로 실행할 수 없습니다. 이 rake routes의 관련 부분이 앞에있는

# config/routes.rb 
MyApp::Application.routes.draw do 

    namespace :api, defaults: {format: :json} do 
    namespace :v1 do 
     resources :sessions, only: [:create, :destroy] 
     resources :users, only: [:create] 
    end 
    end 

    # Configuration when using ActiveAdmin v.0.5.1 
    # devise_for :users, controllers: { sessions: "sessions" } 

    config = ActiveAdmin::Devise.config 
    config[:controllers][:sessions] = "sessions" 
    devise_for :users, config 

    ActiveAdmin.routes(self) 

    root :to => "home#index"  
end 

...

# spec/features/users/active_admin_spec.rb 
require 'spec_helper' 

describe 'Active Admin' do 

    before(:all) do 
    I18n.locale = :en 
    end 

    it "rejects a reqular user" do 
    @user = create(:user) 

    visit '/users/sign_out' 
    visit '/users/sign_in' 
    fill_in I18n.t('devise.sessions.new.email'), with: @user.email 
    fill_in I18n.t('devise.sessions.new.password'), with: @user.password 
    click_button I18n.t('devise.sessions.new.sign_in') 

    visit "/admin" 
    expect(page).not_to have_content "Dashboard" 
    expect(page).to have_content "Unauthorized Access!" 
    end 

end 

: 실패 동작을 논의하기 위해 예로서

Failure/Error: visit '/users/sign_out' 
ActionController::RoutingError: 
    No route matches [GET] "https://stackoverflow.com/users/sign_out" 

다음 사양의 역할 : 나는 ActionController::RoutingError을받을 업그레이드 :

  new_user_session GET /users/sign_in(.:format)    sessions#new 
       user_session POST /users/sign_in(.:format)    sessions#create 
     destroy_user_session DELETE /users/sign_out(.:format)    sessions#destroy 
       user_password POST /users/password(.:format)    devise/passwords#create 
      new_user_password GET /users/password/new(.:format)   devise/passwords#new 
     edit_user_password GET /users/password/edit(.:format)   devise/passwords#edit 
          PUT /users/password(.:format)    devise/passwords#update 
    cancel_user_registration GET /users/cancel(.:format)    devise/registrations#cancel 
      user_registration POST /users(.:format)      devise/registrations#create 
     new_user_registration GET /users/sign_up(.:format)    devise/registrations#new 
    edit_user_registration GET /users/edit(.:format)     devise/registrations#edit 
          PUT /users(.:format)      devise/registrations#update 
          DELETE /users(.:format)      devise/registrations#destroy 
      user_confirmation POST /users/confirmation(.:format)   devise/confirmations#create 
     new_user_confirmation GET /users/confirmation/new(.:format)  devise/confirmations#new 
          GET /users/confirmation(.:format)   devise/confirmations#show 
       admin_root  /admin(.:format)      admin/dashboard#index 
      admin_dashboard  /admin/dashboard(.:format)    admin/dashboard#index 
    batch_action_admin_users POST /admin/users/batch_action(.:format) admin/users#batch_action 
       admin_users GET /admin/users(.:format)     admin/users#index 
          POST /admin/users(.:format)     admin/users#create 
      new_admin_user GET /admin/users/new(.:format)    admin/users#new 
      edit_admin_user GET /admin/users/:id/edit(.:format)  admin/users#edit 
       admin_user GET /admin/users/:id(.:format)    admin/users#show 
          PUT /admin/users/:id(.:format)    admin/users#update 
          DELETE /admin/users/:id(.:format)    admin/users#destroy 
batch_action_admin_comments POST /admin/comments/batch_action(.:format) admin/comments#batch_action 
      admin_comments GET /admin/comments(.:format)    admin/comments#index 
          POST /admin/comments(.:format)    admin/comments#create 
       admin_comment GET /admin/comments/:id(.:format)   admin/comments#show 

이 업그레이드 한 후 rake routes의 관련 부분입니다 :

  new_user_session GET  /admin/login(.:format)     sessions#new 
       user_session POST  /admin/login(.:format)     sessions#create 
     destroy_user_session DELETE|GET /admin/logout(.:format)    sessions#destroy 
       user_password POST  /admin/password(.:format)    active_admin/devise/passwords#create 
      new_user_password GET  /admin/password/new(.:format)   active_admin/devise/passwords#new 
     edit_user_password GET  /admin/password/edit(.:format)   active_admin/devise/passwords#edit 
          PUT  /admin/password(.:format)    active_admin/devise/passwords#update 
    cancel_user_registration GET  /admin/cancel(.:format)    devise/registrations#cancel 
      user_registration POST  /admin(.:format)      devise/registrations#create 
     new_user_registration GET  /admin/sign_up(.:format)    devise/registrations#new 
    edit_user_registration GET  /admin/edit(.:format)     devise/registrations#edit 
          PUT  /admin(.:format)      devise/registrations#update 
          DELETE  /admin(.:format)      devise/registrations#destroy 
      user_confirmation POST  /admin/confirmation(.:format)   devise/confirmations#create 
     new_user_confirmation GET  /admin/confirmation/new(.:format)  devise/confirmations#new 
          GET  /admin/confirmation(.:format)   devise/confirmations#show 
       admin_root   /admin(.:format)      admin/dashboard#index 
      admin_dashboard GET  /admin/dashboard(.:format)    admin/dashboard#index 
    batch_action_admin_users POST  /admin/users/batch_action(.:format) admin/users#batch_action 
       admin_users GET  /admin/users(.:format)     admin/users#index 
          POST  /admin/users(.:format)     admin/users#create 
      new_admin_user GET  /admin/users/new(.:format)    admin/users#new 
      edit_admin_user GET  /admin/users/:id/edit(.:format)  admin/users#edit 
       admin_user GET  /admin/users/:id(.:format)    admin/users#show 
          PUT  /admin/users/:id(.:format)    admin/users#update 
          DELETE  /admin/users/:id(.:format)    admin/users#destroy 
batch_action_admin_comments POST  /admin/comments/batch_action(.:format) admin/comments#batch_action 
      admin_comments GET  /admin/comments(.:format)    admin/comments#index 
          POST  /admin/comments(.:format)    admin/comments#create 
       admin_comment GET  /admin/comments/:id(.:format)   admin/comments#show 

IT는 SessionsController을 무시하는 것 같다.
나는 Devise v.2.2.7을 사용합니다.


인증 버그

난 그냥이 구성 이 관리자가 아닌 사용자에 대한 ActiveAdmin을에 액세스 할 수 있습니다 것으로 나타났습니다. 그래서 여기서 수정해야 할 것이 더 있습니다. 일반 사용자로 로그인하여 직접 시도하면 /admin을 방문하십시오.

인증 버그 ActiveAdmin을의 v.0.6.2에 문제가 발생했습니다 결코

해결. 나는 단순히 원래 설정 한 구성을 파기했다. 그 당시 나는 how to set up ActiveAdmin and Devise with a single user model에 관한 튜토리얼을 따랐다. rails generate active_admin:install User을 실행할 때

# config/initializers/active_admin.rb 
config.authentication_method = :authenticate_user! 

이 구성이 생성됩니다 이것에

# config/initializers/active_admin.rb 
config.authentication_method = :authenticate_active_admin_user! 

: 기본적으로, 실수로 다음 매개 변수를 대체했다.


마지막으로, 나는 Leger has served the correct configuration이라고 말할 수 있습니다. 모든 것이 지금 작동하고 있기 때문에 귀하의 답변을 수락 할 수있어서 기쁩니다 (제가 말할 수있는 한).

답변

1

문제는 경로를 정의한 순서대로입니다. this question

간략한 설명 resources :users 앞에 devise_for을 입력하십시오.ActiveAdmin을가 User을 위해 사용되기 때문에 인 이름에 약간의 충돌이 최고

에 devise_for 이동 한 후 오류를 라우팅 해결하기 위해

UPD 경우 rb. '/users/sign_out' 같은 경로는 단순히 존재하지 않는, 그래서 일반 사용자에게 관련

new_user_session  GET   /admin/login(.:format) sessions#new 
user_session   POST  /admin/login(.:format) sessions#create 
destroy_user_session DELETE|GET /admin/logout(.:format) sessions#destroy 

무시 모든 : 블록

config = ActiveAdmin::Devise.config 
config[:controllers][:sessions] = "sessions" 
devise_for :users, config 

은/관리/스타일 방식으로 표준 devise_path_variables와 관리자에 관련된 모든 것을 정의한다. 당신의 경로가

devise_scope :admin_user do 
    post '/admin/logout', :to => 'active_admin/devise/sessions#destroy' 
end 

희망이 뜻을 파일로

SysAdmin::Application.routes.draw do 

    # define plain-user routes  
    devise_for :users, :controllers => { :sessions => "sessions" } 

    # define admin-user routes  
    config = ActiveAdmin::Devise.config 
    config[:controllers][:sessions] = "sessions" 
    config[:as] = 'admin' # override standard_path_variable naming for admins 
    devise_for :users, config 

    namespace :api, defaults: {format: :json} do 
    namespace :v1 do 
     resources :sessions, only: [:create, :destroy] 
     resources :users, only: [:create] 
    end 
    end 

    root :to => "home#index" 
    ActiveAdmin.routes(self) 
end 
+0

주문을 변경하면 같은 오류가 발생합니다. – JJD

+1

관리자가 아닌 사용자에 대한 액세스를 제한하려면 http://stackoverflow.com/questions/9415884/how-to-limit-acces-to-active-admin-to-admin-users를 확인하십시오. 도움이 되길 바랍니다. – Leger

0

이 추가 :

는 routes.rb를 조정, 당신은 일반 사용자 및 관리자 사용자 모두 경로를 정의 할 필요를 해결하려면 work