2013-10-06 3 views
0

에서 나는 우리가 설정 파일의 경로 이름을, 무언가 같이 볼하지 않은 방법 :경로 코드에서만 접근 및 URL

match 'controller/posts' => 'controller#posts', :as => 'posts' 

가 그 행동과 컨트롤러에 대한 명명 된 경로를 생성 .

하지만이 경로는 코드에서 액세스해야합니다. 보기에서 게시물 버튼을 클릭하면 사용자에게이를 실행해야합니다.

하지만 누군가 www.xyz.com/posts를 실행하면 실행하지 않아야합니다. 그게 가능하니?

+2

"이 경로는 코드에서 액세스해야합니다"라는 의미는 100 % 명확하지 않습니다. 이전에 렌더링 한 HTML의 요청에만 응답하는 컨트롤러를 만드는 방법을 묻는 중입니까? 애플리케이션에 이미 인증 및 사용자 세션이 있습니까? –

답변

1

왜 이런 식으로 나갈지 확신하지 못합니다. 다른 컨트롤러에서 특정 코드 비트를 호출 할 수있는 것이 좋습니다. 따라서 언급 한 이유로 경로가 작동하지 않습니다 (브라우저에서 사용 가능할 것입니다).

대신이 코드를 추출하여 자신의 라이브러리에 넣어야합니다.

lib 디렉토리/foobar.rb :

module Foobar 
    def my_method 
    # add your code here 
    end 
end 

그런 다음 당신은 당신의 코드에서 원하는 whereever에서 호출 할 수 있습니다.

1

아니요 누군가 링크를 클릭하는 대신 브라우저에서 URL에 입력 한 경우 경로를 설정하고 액세스를 거부 할 수 없습니다.

사용자가 URL을 추측하지 못하도록하려는 것 같습니다. 이 작업을 수행하는 몇 가지 옵션이 있습니다 :

  • 는 URL에 대한
  • 사용 추측하기 어려운 URL에 고유 한 토큰을 인증 필요는 (/ 게시물/1122bbbbababab/1)

당신이 할 수있는 인증을 위해 devise을 사용하십시오.

는 설치 할 수있는 토큰을 사용하여 같은 경로 :
match 'controller/{some unique token here}/posts' => 'controller#posts', :as => 'posts' 

이 경로에 제약 조건을 설정하는 다른 방법에 대한 Rails guide on Routes에서보세요.

+0

실제로 POST 경로의 경우 * 조금 더 진행할 수 있습니다. 예를 들어 요청에 디지털 서명을하거나 nonce를 사용하여 이전에 렌더링 된 HTML 양식 (또는 자동화) 만 사용할 수 있습니다. 일부 추가 숨겨진 필드. 이는 반복 요청 공격을 막는 데 사용할 수 있습니다. OP가 그 혜택을 누릴 지 명확하지 않거나,보다 근본적인 보안 질문 (귀하의 답변에서 다루는)을 요구하고 있습니다. 독특한 토큰에 대한 귀하의 제안은 OP가 요구하는 것과 매우 비슷합니다. –

+0

POST 요청 및 nonce에 대한 좋은 지적. 이는 공개/비공개 암호화를 사용하여 일정 기간 동안 유효한 서명 토큰을 생성함으로써 URL 요청의 일부가 될 수 있습니다 (csrf-token rails가 생성하는 것과 유사). 나는 이것으로 나의 대답을 업데이트 할 것이다. – roo