2011-04-27 5 views
1

Devise는 필자가 작업 한 지난 몇 레일즈 3 프로젝트에 대한 인증 플러그인으로갔습니다. 현재 프로젝트에서 기본 구성 모듈을 사용하는 사용자 모델로 바닐라 설치를 사용하고 있습니다.이미 로그인 한 상태에서 기본 인증을 요청하는 이유는 무엇입니까?

before_filter :authenticate_user! 

그것은 나를 기본 인증에 대한 프롬프트 : 내가 고안의를 사용하는 컨트롤러에 아약스의 게시물을 수행하는 링크를 클릭 할 때마다

. 나는 전에 이런 일이 일어난 것을 본 적이 없으며, 어떤 일이 일어 났는지에 대해 누구나 생각하고 있는지 궁금해하고있었습니다.

답변

2

AJAX는 (보통) javascript 또는 json의 content_type이 될 것입니다.

이런 경우, devise가 로그인 페이지로 리디렉션하지 않으므로 401 응답 코드가 발행됩니다 (로그인 필요). 브라우저가 401을 얻고 HTTP 인증으로 로그인하도록 변경합니다.

보호 된 엔드 포인트로 아약스 정보를 보내기 전에 사용자가 로그인 한 경우보기를 확인하는 것이 좋습니다.

+0

또한 jQuery .ajax에서 응답 코드를 수신하고 거기에서 401을 처리 할 수 ​​있습니다 (로그인 양식을 팝업하거나 리디렉션하거나 사용자에게 먼저 로그인하도록 알려주십시오). –

+0

문제는 내가 이미 기록한 것입니다. 아약스 요청을 할 때. –

+0

다음을 제거해보십시오 : authenticate_user! 요청 후 컨트롤러에 "current_user"가 있는지 확인합니다. 하지만 그건 당신의 문제입니다 –

1

http://jasoncodes.com/posts/rails-csrf-vulnerability

위의 링크는 레일이 고안의 "각 비 GET Ajax 요청에"모든과 인증 토큰을 필요로 언급하고있다. (위조 물건으로부터 보호하기 때문에)

이 기사에서도이 작업을 수행하는 방법에 대해 언급하지만 그 부분을 여전히 파악하고 있습니다.

그렇게하지 않으면 Rails가 두 번째로 로그인해야합니다 (일반적으로 한 번만).

+0

대단히 감사합니다. 이것은이 문제에 대한 진정한 해결책입니다. – mindeavor

관련 문제