2014-03-12 2 views
1

나는 보통의 html 파일에서 localhost를 방문합니다. HTML 코드는 내가 Home 링크를 클릭하면ruby ​​on rails를 사용하여 마지막으로 방문한 URL을 얻으십시오.

<!DOCTYPE html> 
<html> 
<body> 
<div id="deal"> 
<a href="http://localhost:3000">Home</a> 
</div> 
</body> 
</html> 

내 파일 경로

file:///home/selva/Desktop/test.html#deal 

입니다, 나는 레일 프로젝트에 #deal을 얻을 필요가있다. 그래서이 방법 URI(request.referer).path

require 'uri' 
class RefUrlAuthentication < ::Devise::Strategies::Authenticatable 
    def valid? 
    puts "PARAMS: #{URI(request.referer).path}" 
    end 
end 

을 사용 그리고 request.referer하지만 행운을 시도했다. 여기

나는이 코드에 문제가 있는지 알아낼 수 없습니다 URI(request.referer).path

를 사용할 때이 오류가 발생이 오류를

ArgumentError (bad argument (expected URI object or URI string)): 
lib/custom_authentication.rb:100:in valid?' 

을 얻고있다. 이 오류를 무시하고 url 파일 URL을받는 방법. 시간 내 주셔서 감사합니다.

답변

1

request.referer은 사용자가 직접 URL을 입력하여 직접 사이트를 탐색 할 때 리퍼러가 없으므로 특히 nil 일 수 있습니다. 당신은 그러나 빈 문자열로 리퍼러를 기본 수 있습니다

URI(request.referer || '').path 

사이드 참고 : 참조자는 브라우저에 의해 설정된 HTTP 헤더 HTTP_REFERER에서 결정된다. 즉, 데이터가 올바른지 또는 현재 상태인지 의존 할 수 없습니다. 인증 전략에서 수행하고자하는 작업이 무엇이든 관계없이 사용자가 인증되었는지 여부를 결정하지 마십시오. 누군가가 값을 조작하고있을 수 있습니다.

+0

감사합니다. 이제 오류가 수정되었습니다. 하지만 내 파일 경로를 어떻게 취할 수 있습니까? – Selvamani

+0

내가 유효한지 아닌지를 확인하지 않았으므로 여기서 해시 값을 사용하는 다른 함수를 사용합니다. 그래서 파일 경로에서 해시 값을 가져와야합니다. – Selvamani

+0

아마도 브라우저가 referer 헤더를 제대로 보내지 않을 수도 있습니다. 그게 내가 referer에 의존하는 것을 조심해야한다고 말했을 때 내가 의미했던 것. 헤더가 올바르게 전송되었는지 확인하십시오. –

관련 문제