2013-06-16 4 views
0

내 문제는 이것입니다.아약스 요청시 사용자 승인 허용

사용자가 두 개의 탭을 열고 인증이 필요한 동일한 페이지로 이동하면 모두 괜찮습니다. 탭에서 로그인하면 분명히 다른 탭이 아니라 로그인 페이지로 리디렉션됩니다. 아직도 정상입니다.

그러나 javascript를 사용하는 페이지에는 사용자가 작업을 수행 할 수 없으며 "sign_in.json"렌더링이 있습니다. 여기에는 devise 오류 메시지 "unauthenticated ". 이 메시지를 보내면 양식을 사인하도록 사용자를 리디렉션해야합니다. 어떻게해야합니까?

+0

내가 제대로 이해한다면 "unauthenticated"라는 오류 메시지가 표시된 기기를 리디렉션 하시겠습니까? – David

+0

일종. 웹 브라우저의 콘솔 (Network 탭)에서 볼 수 있기 때문에이 메시지에 대해 알고 있습니다. 메시지는 사용자에게 표시되지 않습니다. 그가 노래하는 페이지로 리디렉션 된 경우 표시되었을 것입니다. 또한 서버 로그에'401 Unauthorized'가 표시됩니다. –

+0

'401 Unauthorized '에 대한 제 이해는 인증이 필요하고 실패했거나 아직 제공되지 않았을 때 발생합니다. 이것에 더하여 당신이 내가 생각해야 할 무언가를 발견했을 때 깨달은 세션 컨트롤러 내부의 리다이렉트를 오버라이드하고 싶다는 생각이 들었다. – David

답변

0

javascript를 사용하여 401 및 일부 json 데이터로 응답하는 서버에 아약스 요청을하는 것처럼 들릴까요? 당신이 jQuery를 사용하는 경우, 당신은 같은 것을 할 수 있습니다

# Your ajax call 
$.ajax({ 
    ... 
    statusCode: { 
    401: function() { 
     # Redirect to login 
     window.location.replace("http://yoursite.com/login_page"); 
    } 
    } 
}); 

편집 :

당신은 세계적으로 jQuery를 모든 아약스 요청에 대해이 동작을 변경할 수 있습니다 설정 글로벌 아약스를 다음과 같이 ajaxSetup 사용하여 :

$.ajaxSetup({ 
    statusCode: { 
    401: function() { 
     # Redirect to login 
     window.location.replace("http://yoursite.com/login_page"); 
    } 
    } 
}); 

그러나 jQuery 설명서 은 다른 플러그인 등의 의도 된 동작을 깨뜨릴 수 있으므로이을 강력히 권장합니다. 개인적으로이 예제에서는 괜찮을 것이라고 생각합니다. 모든 것이 예상대로 작동하는지 테스트하십시오. 당신은 여기에서 자세한 내용을보실 수 있습니다 : http://api.jquery.com/jQuery.ajaxSetup/

+0

예. 페이지에는 꽤 많은 아약스 요청이 있습니다 (프론트 엔드는 Backbone으로 작성되었습니다). 401은 devise (내 이해에)에 의해 렌더링, 그 보석을 조정하여 글로벌 만들 수 있다고 생각합니다.하지만 모든 아약스 요청을 찾고 오류 처리를 추가해야 할 것 같습니다. 아니면 일종의 "try/catch"를 만들 수 있습니까? –

+0

또한, 장치 설정의 조정 덕분에 페이지에서 노래하기 위해 리디렉션을 보낼 수있었습니다. 그러나이 작업이 취소되었습니다 ... –

+0

모든 jQuery 아약스 요청에 대해이를 전역 적으로 변경하는 방법이 추가되었습니다. :) – jokklan

0

귀하의 게시물이 매우 도움이되었다

@jokklan, 나는 세계 아약스 설정을 변경했다, 잘 작동하는 것 같군. 또한 401 코드로 응답을 보내야했습니다.

이를

내가 컨트롤러가 JSON으로 응답하기 때문에 Devise::FailureApp

def respond 
    # ... 
    elsif request.xhr? 
    redirect_to some_path, status: 401 
    end 
    # ... 
end 

을 사용자 지정하여 관리, 리디렉션은 JSON에서,하지만 난 그것을 잡아에 사용자를 리디렉션 할 수 있었다 (401)로 상태를 설정하여도 무슨 일이 생긴 내가 필요로하는 길 ajaxSetup

가장 예쁜 것은 아니지만 나는 더 나은 의견을 제시하고 있습니다.

관련 문제