CI 묻고 답하기

제목 트위터 OAuth 연동시 콜백 함수를 위한 초보의 질문입니다.
글쓴이 각혈염통 작성시각 2010/06/17 11:46:10
댓글 : 11 추천 : 0 스크랩 : 0 조회수 : 33505   RSS
컨트롤러 구조

이게 현재 만든 구조입니다. 저 login 함수를 실행하면 트위터의 OAuth 인증 페이지로 이동하고 거기서 승인하면 callback 함수가 실행되는 방식인데 문제는,

원하는 url은 에러

저렇게 콜백 주소를 /auth/tw/callback에 토큰만 쿼리로 받으려고 하면 에러가 뜹니다. 하지만 쿼리문을 제거하면

함수 실행은 정상이지만 정작 중요한 쿼리는 지원안함

이렇게 잘 작동합니다.


트위터 뿐만 아니라 다른 서비스도 연동을 하고 싶어서 되도록이면 저 디렉토리 구조를 유지하고 싶은데 CI에서는 어떻게 해야 가능할까요?

팁 게시판에서 관련글을 읽어보긴 했는데 솔직히 그 함수를 어디에 넣으라는 건지도 모르겠고 그걸 어떻게 호출해서 쓰라는 건지도 모르겠습니다. 트위터용 CI 라이브러리가 트위터 웹 페이지에서 사용하는 reply, retweet을 지원 안해주는 것도 어떻게 해결해야할지 감이 않오는데 이런 것 까지... (_ㅠㅠ)_

물로 ?c=tw&m=callback 이렇게 하면 되기야 하지만 지저분합니다. 아름답지 않아요. 용납하기 싫습니다.

태그 쿼리,url,query
 다음글 DB 생성하고 확인하기 (2)
 이전글 [초보]라우팅 질문 (6)

댓글

각혈염통 / 2010/06/17 11:51:42 / 추천 0
디렉토리 구조는 포기하면서 라우트를 지정해주는 것이 나을까요? CI가 세그먼트 위주로 만들어졌다고는 하지만 다른 서비스와의 연동에서는 첫인상이 나쁘네요.
변종원(웅파) / 2010/06/17 14:16:18 / 추천 0
첫인상이 나쁘시면 안되는데 기본적으로 간과하신 것이 있습니다.

config.php의 주소관련 셋팅을 바꾸셨는지요? ci 트위터 라이브러리 배포사이트에 가면
친절히 셋팅을 바꿔야 작동한다고 나와있습니다.

ci의 기본셋팅은 /aaa/bbb/ccc 주소에 대응합니다. /aaa/vvv?ssss=dddd 는 당연히 못찾습니다.

사족 : 본인이 셋팅안해서 생기는 문제를 ci 전체로 확대하시는 것은 아니라고 봅니다.

각혈염통 / 2010/06/17 14:17:54 / 추천 0
일단은 해결한 것 같아보입니다.



저기 저 return문은 주석처리해서 삭제하면 원하는 기능은 작동합니다.



부작용이 있지는 않을지, 확인은 어떻게 해야 할지... 좀 걱정되네요.

변종원(웅파) / 2010/06/17 14:26:37 / 추천 0
config.php에서 설정 하나만 바꾸시면 되는데.... ^^
ci core는 되도록이면 안 건드리시는 것이 좋습니다.


$config['uri_protocol']    = "PATH_INFO";

또는

$config['uri_protocol']    = "REQUEST_URI";
각혈염통 / 2010/06/17 14:31:24 / 추천 0
$config['enable_query_strings'] = TRUE; 말씀이신가요?

포기할 수 있는 것도 아니고 만들어준 사람들의 노고엔 감사하고 있습니다. 다만 초보라서 저 return 문이 왜 저기서 어떤 기능을 하는지 알 수 없는 게 답답할 뿐입니다.

세그먼트와 쿼리를 함께 쓸 수 있는 것이 상식적인 사용법이라고 생각하는데 어째서 둘 중 하나만 쓰도록 만들어둔 걸까요? 컨피그 파일에선 수정이 안되는 부분이라 제작자는 쓰지 않길 바라는 것 같은데 이유가 뭘까요? 혹시 아시나요?
각혈염통 / 2010/06/17 14:32:27 / 추천 0
REQUEST_URI 로 설정했을 땐 안됐었거든요. 다른 곳에 손본 것 때문에 그런건지 복구한 다음에 확인해보겠습니다.
각혈염통 / 2010/06/17 14:35:41 / 추천 0
return문 살리고 REQUEST_URI 로 설정하면 안됩니다. PATH_INFO로 설정하면 되네요. 두개 차이점이 뭔지 일단 찾아보겠습니다.
각혈염통 / 2010/06/17 15:05:18 / 추천 0
http://php.net/manual/kr/reserved.variables.server.php에 차이점이 나온다는데 읽어봐도 뭔 소린지 모르겠네요. 언젠가 알 수 있기를 바라면 지금은 그냥 그런가보다 해야 할 듯...
변종원(웅파) / 2010/06/17 15:28:55 / 추천 0
기존 쿼리스트링방식의 주소체계가 복잡하고 직관적이지 않아서 fancy url이라는 세그먼트 형태가 나온 것이구요.
트위터api는 일반적으로 사용하는 쿼리스트링방식에 맞춰져 있는 것뿐입니다.
그래서 쿼리스트링방식으로 ci에서 받으면 404 에러가 나기때문에 트위터 라이브러리 제작자가 PATH_INFO 형식으로 바꿔서 사용하라고 한 것입니다.

세그먼트와 쿼리스트링을 혼용하는 것은 개발자의 판단몫입니다. 제 경우도 여러 사정상 세그먼트와 쿼리스트링이 혼합된 형태를 사용했습니다. (http://www.webmaker3.com/downloads/?method=view&no=348&page=1)
downloads 는 컨트롤러가 아니라 메뉴입니다. 다운로드메뉴 - 주소가 직관적이죠.
쿼리스트링은 다운로드에 해당하는 348번 글을 보기
각혈염통 / 2010/06/17 16:29:22 / 추천 0
/auth/tw/callback/[토큰] 같이 콜백 함수를 만들 수 있으면 가장 마음에 들겠지만 트위터를 손볼 순 없으니 아쉽지만 혼합식을 사용해봤는데 쓰던 방식에서 하나를 바꾸니 역시 딸려서 바뀌는게 만만치 않네요.

uri 프로토콜을 path_info로 바꾸니  redirect('/auth/tw/close', 'refresh'); 을 하면 [도메인]/auth/tw/close로 이동하는게 아니라 [도메인]//auth/tw/auth/tw/close 로 이동하는 문제가... 이걸 해결하려니 config.php에서 그동안 지정하지 않던 베이스url 지정하고 redirect(site_url().'auth/tw/close', 'refresh'); 로 바꿔야하네요.

주소 문제는 해결이 되었으니 이젠 ajax 만들러...
sisco / 2010/06/18 09:57:58 / 추천 0
ㅋㅋ.. 저도 이문제때문에.. 많이 복잡해했는데..
우선'enable_query_strings' 을 TRUE 로 잡아주시면 바로 되더군요..
그리고 마지막 토큰받고 리다이렉트 해줄때 인자를 'redirect'로 주시면 바로 됩니다..
저도 refresh로 도메인/컨트롤/함수 이렇게도 줘보고 /컨트롤/함수 이렇게 줘보고 --;; 별짓 다 해봤지만
redirect로 /컨트롤/함수 로 완료 되더군요..
API사용시 쿼리스트링은 사용안할래야 안할수 없더군요..
ㅠ.ㅠ 안습입니다.