2011-01-10 2 views
2

나는 레일 애플리케이션을 작업 중이며 책에 따라 간단한 로그인 시스템을 추가했다. 경로가 존재하더라도 로그인 시도 후 일치하는 경로가 없습니까?

나는 컨트롤러 관리자를 만든 : 레일 그것은 문제에서이없는 내가 http://localhost:3000/admin/login에 도착 할 수

get "admin/login" 
    get "admin/logout" 
    get "admin/index" 
  1. 을 routes.db 다음 경로를 추가 컨트롤러 관리자 로그인 로그 아웃 지수

    을 생성 모든.

  2. 로그인하려고하면 "/ admin/login"과 일치하는 경로가 없습니다.

이제 첫 번째 혼란스러운 부분은 내 AdminController의 "로그인"메소드가 전혀 실행되지 않는다는 것입니다.

두 번째 혼란스러운 부분이 코드가 마법처럼 작동한다는 것입니다 -/관리자/로그인에 이르기까지 모든 리디렉션

def authorize 
    unless User.find_by_id(session[:user_id]) 
     flash[:notice] = "you need to login" 
     redirect_to :controller => 'admin', :action => 'login' 
    end 
    end 

Sidenotes :

  • 내가 서버를 여러 번 다시 시작합니다.
  • 캐싱 문제가 없는지 확인하기 위해 다른 브라우저를 사용해 보았습니다. 당신이 레일 및/또는 인증에 대해 배울 로그인 시스템을 구축하지 않는 한
+1

당신이 로그인하려고 할 때 POST 요청이 아니라 GET이라고 생각합니다. 로그인 양식 코드 표시 – fl00r

답변

2

, 옆 (/ 선두 통지)

match "/admin/login" => "admin#login" 
match "/admin/logout" => "admin#logout" 
match "/admin/index" => "admin#index" 

가로

을 시도, 당신은 아마 더 좋을 것 같아 Devise와 같은 것을 사용합니다. 데이비드 Sulc의 대답에 이어

+0

올바르게 기억한다면 Rails 경로에서는 선행 슬래시가 중요하지 않습니다. 그래도 Devise를 사용하는 데는 조언이 필요합니다. –

+0

선택적 선행 슬래시가 맞았습니다. 그러나'match '로'get'을 대체하는 것은 인증서가 POST 된 경우를 수정해야합니다 –

1

:

당신은 그들에게 갈 의미 get 요청과 같은 경로를 정의하고 당신은 당신이 당신의 주소 표시 줄에 URL을 입력 할 때 발생하는 기본적 인 GET /admin/login 요청을 수행해야합니다 또는 그것을 사용하는 링크를 따르십시오.

그러나 이러한 URL을 양식에서 사용하려고하면 양식에 POST 요청이 발생하며이 모든 것을 get-only 요청으로 정의했기 때문에 Rails는 호환 가능한 경로를 찾을 수 없습니다.

저는 Devise와 같은 대안 시스템을 살펴보아야한다는 David의 의견에 동의합니다.