0

이제는 devise gem을 추가하고 구성했습니다. 내 양식의 자동 저장 AJAX 호출을 차단하는 것 외에는 큰 효과가 있습니다. 내 컨트롤러의 상단에 AJAX Through Devits (Rails)

, 내가 가진 :

before_filter :authenticate_user! 

내 AJAX 호출이 동일한 컨트롤러에 관해서 :

def autosave 
    #TODO: update relative entry 
    #TODO: verify user logged in 
    #TODO: verify entry belongs to relative user 
    render content_type: 'text/xml', inline: "<result status='ok' />" 
    end 

은 물론 내가 대신과 같이 내 앞에 필터를 선언 할 수 :

before_filter :authenticate_user!, except: :autosave 

.. 그러나이 기능은 아무도이 컨트롤러 기능을 다른 팀에서 호출하지 못하도록 차단합니다 이자형.

이 함수를 호출하는 가장 좋은 방법은 무엇입니까? 나는 여전히 로그인 한 사용자 만 전화를 걸 수 있으며 편집중인 주어진 레코드가 해당 통화에 속하는지 확인할 수 있습니다.

답변

1

당신이하려고하는 것이 확실하지 않지만 자동 저장에 약간의 로직을 추가해야하는 것처럼 들립니다. 이 설정을 사용하면 함수가 여전히 호출되지만 조건이 옳지 않으면 함수가 수행하는지 여부는 완전히 다른 것입니다.

def autosave 
    #Verify that the user is signed in and he has ownership of entry 
    if !current_user.nil? && entry.user == current_user 
    render content_type: 'text/xml', inline: "<result status='ok' />" 
    else 
    #do nothing nothing or redirect with error here 
    end 
end 

당신이 보안 대책, 즉 CSRF 보안 토큰 같은 Ajax 호출에 몇 가지 추가 정보를 제공해야 AJAX와 게시물을 만드는 것입니다. 보안 토큰을 사용하는 예제 AJAX 요청은 Devise not setting current_user on Ajax post even though correct x-csrf-token is included in request header을 참조하십시오. 또한 <%= csrf_meta_tag %>도 헤드 태그에 포함해야합니다.

+0

전화가 AJAX (정확하게 CKEDITOR 형식이어야 함)에서오고 Rails 링크가 아닌 것이므로 current_user.nil처럼 보입니까? 항상 true를 반환합니다. 전달해야하는 특정 매개 변수가 있습니까? – kwikness

+0

current_user는 정확히 무엇을 반환합니까? – kwikness

+0

보안 토큰에 대한 업데이트 된 답변을 확인하십시오. – Noz