안녕하세요 여러분, 응용 프로그램 컨트롤러에서 필터 설정 전에 레일즈 응용 프로그램에서 루비를 사용하여 소유자 만 문서를 편집 할 수 있도록했습니다. 그러나 권한 확인은 항상 실패한 경우에도 실패합니다 . 다음은 코드입니다.은 필터가 예상대로 작동하지 않습니다.
def get_logged_in_user
id = session[:user_id]
unless id.nil?
@current_user = User.find(id)
end
end
def require_login
get_logged_in_user
if @current_user.nil?
session[:original_uri] = request.request_uri
flash[:notice] = "You must login first."
redirect_to login
end
end
def check_current_user_permission
require_login
logger.debug "user id is #{params[:user_id]}"
logger.debug "current user id is #{session[:user_id]}"
if session[:user_id] != params[:user_id]
flash[:notice] = "You don't have permission to do that."
redirect_to :controller => 'home'
end
end
주목할 코드는 check_current_user_permission에 있습니다. 다음은 내 로그 출력의 예입니다.
user id is 3
current user id is 3
Redirected to http://localhost:3000/home
Filter chain halted as [:check_current_user_permission] rendered_or_redirected.
누구에게이 문제가 발생했는지 알 수 있습니까? 분명히 3의 user_id는 세션의 user_id 3과 동일합니다. 무엇이 잘못 되었습니까?
그냥 궁금해서 ... 인증 용으로 authlogic을 사용하고 있습니까? – DJTripleThreat
또한 세션 [: user_id]이 '3'이고 params [: user_id]가 '3'이고 이들이 같지 않을 수도 있습니다. 나는이 문제를 가지고 있는데, 왜냐하면 두 개의 DateTime 객체가있을 때 .to_s가 같을지라도 어떤 이유로 든 평등하게 평가되지 않는 이유는 두 번째 다른 부분이기 때문입니다. – DJTripleThreat
나는 그 DJTripleThreat를 시도 할 것이다 ... 또한 나는 인증을 위해 어떤 보석도 사용하지 않고있다. – Jimmy