본문 바로가기

Ruby on Rails

마이그레이션, 로그인 추가

벌써 시작한지는 두 달째인데 정작 제대로 공부한건 며칠 되지 않는듯하다.
그간 겪었던 어려움과 해결과정을 적어두기로 한다.

'레일스 레시피' 책에 있는 사용자 인증하기 방법을 가지고 'Ruby on Rails 초고속웹개발의시작'에 있는 사진 슬라이드보기 예제에 로그인을 넣어보기로 했다.

user라는 테이블의 마이그레이션을 하나 더 만들고 마이그레이션을 돌리려니 (rake migrate ) 겁이 덜컥났다.
{마이그레이션(화일)은 테이블의 구조를 적어 놓은 화일인데, SQL문으로 create table 어쩌구 적어서 돌리면 테이블 생기도록 하는 것과 유사하나 마이그레이션 화일은 버전별로 생기고 테이블을 지울수도 있는 등 단순한 sql문과는 차원이 좀 다르다.}

이미 만들어 놓은 테이블이 날라가는거 아닌가? 책 어느부분에선가 보니까 어떻게 하면 데이타가 다 날라가니까 조심하라는 말을 본것 같은데 기억이 잘 나지 않는다.
어차피 날라갈 데이터도 별로 없어서 과감히 돌렸다. 새로 만든 테이블만 추가되더라. --;

마이그레이션은 버전번호를 명시하지 않으면 데이타베이스 내에 별도의 버전번호가 들어간 테이블을 만드는 그 테이블상의 버전 번호와 마이그레이션 화일의 앞에 붙는 번호를 비교해서 이후에 생긴 마이그레이션 화일만 자동으로 돌려준다.

버전번호 명시하면 그버전 이후에 생긴 테이블은 몽땅날라가니까 조심하시길 ^^
테이블 다 지우려면, rake db:migrate version=0 이렇게 하면 태초의 상태로 돌아감


책에 나온대로 따라하니까 로그인이 붙긴 했는데 이건 무식하게도 컨트롤러 단위로만 제어가 되는거다.
이 예제는 사진 슬라이드쇼 컨트롤러라는 화일에 list edit destroy show 등 등의 메소드가  다 들어 있는데 컨트롤러 화일 앞에 before_filter라는걸 넣으면 그 컨트롤러에 접근만 하면 로그인창으로 보내버리는거다.

세상에 어떤 웹사이트가 보기와 삭제 수정권한을 한큐에 줬다 뺐었다 한단 말인가? 간단하게 보여줄라고 했다지만 너무했다. 그 다음장에 좀 깊이들어가는 예제가 있다는 말에 가보았다.

그러나 거기도 역시, 사용자별로 전체 레코드를 다루는 권한을 달리 줄 수 는 있으나, 내가 만든건 내가 수정삭제되고 남이 만든건 안되는 그런식의 레코드별 제어에 관한건 더 자세한 제3자가 제공하는 라이브러리를 참조하라며 bruce perens라는 사람의 ModelSecurity를 참조하라는 말로 마무리를 짓고야 말았다.

가봤다. 그런데 이사람 설명을 참 우울하게 써 논거야. 데이타베이스 테이블 만드는 마이그레이션도 없으면서 어디에도 없는 user.sql이니 demo.sql을  돌려서 테이블을 만들라네 --; 한참을 열을 내다가 다른걸 찾아보기로 하고 레일스공식사이트의 플러그인찾기에 가보니 애자일웹디벨롭먼트라는 사이트에 평가와 함께 플러그인들이 검색할수 있도록 들어있었다.

거기도 보니 authentication에 관한  플러그인이 한 두개가 아닐쎄?
확실한거 한개만 만들던지 여러개면 뭐가 다른지 비교해가면서 좀 올려놓던지 주르르 대충 설명달아서 올려놨는데 뭐가 어떻게 다른건지 알 수가 없다.

그중 평가 높은 놈을 골라 눌러보니 act_as_authentication이란게 설명도 좀 낫고 쓸만 한 듯하여 설치했다.
그걸 만든사람이 RestFul Authentication이란것도 만들어 놨던데 이 와중에 더 새로운걸 하느니 그중 쉬운걸하는게 낫겠다 싶어 레스트풀은 포기하고 일단 act_as_authentication로 가기로 함.





오늘의 Code Tip

<%= link_to 'log out', :controller => 'slideshows', :action => 'signout' if session[:user] %>
<%= link_to 'log in', :controller => 'slideshows', :action => 'signin' unless session[:user] %> 
view를 담당하는 rhtml화일에 저런 코드를 넣으면 로그인 안했을때는 'log in'이라는 글씨가 나오고 반대면 log out이 표시되도록 할 수가 있다. 조건문을 조딴식으로 쓸수도 있다는걸 보고 놀람











'Ruby on Rails' 카테고리의 다른 글

rake가 don't know how to build 란다 나원참..  (0) 2007.03.18
로그인에서 헤메이다  (0) 2007.03.17
루비 사용자 포럼에 글을 쓰다  (0) 2007.02.20
오타의 압박  (0) 2007.02.15
루비 온 레일스 시작  (1) 2007.02.15