2012/03/17 15:07
Cakephp 시작하기. 회원 로그인 처리하기 Auth components 이용하기. Cakephp 2.0 기준
2012/03/17 15:07 in 뭐하는데/케잌피? 에취 피

Cakephp 를 이용하는 두번째 시간. 두번째 부터는 2.0 기준으로 버젼을 올려 보자. 어쩌다 보니 얄궂은 사이트를 하나 맞게 되었고 이런것 저런 것 고민하기 싫어서 2.0 으로 공부도 할 겸 하나 버젼을 올려봤다. 디렉토리, 파일 작명 규칙이 바뀌었다는 점만 빼면 그렇게 실감하는 바는 별로 없다. 그전에도 Cakephp 를 잘 몰랐다는 이야기만 나처럼 고생하지 않기를 바라는 마음에 나의 삽질기를 적어 놓는다. 또 언제 php 를 사용하게 될런지 몰라도 가끔은 필요한 일일테니 짧은 기억 보존을 위해서라도 흔적을 남겨놔야지 않겠나.
일단 사이트를 띄우고 Member 란 모델까지 만들었다면 Member 를 이용한 로그인 기능과 어느 페이지에서든 로그인한 사용자의 정보를 읽고 사용할 수 있는 Sesseion 에 대한 처리를 해야겠지. Cakephp 에서는 인증에 대해 세가지를 지원한다. "Form", "Basic", "Digest"... Form 이야 누구나 알든 웹페이지의 입력칸에 아이디와 패쓰워드를 넣어서 사용하는 것이고, Basic 은 윈도우 기본 인증창을 띄우는 경우이고, Digest 는 Digest Http 를 이용하는 것이란다. 여기서 살펴 볼 방법은 어느 사이트에서나 쉽게 볼 수 있는 Form 인증 방법을 살펴 보자.
Cakephp 에서는 Form 인증을 사용할 경우 Users 란 모델을 사용한다. 하지만 우리가 DB 를 만들 때 Cakephp 전용으로 만들 것도 아니고 지난 post 에서 처럼 Member 란 테이블을 이용하는 경우 인증에서 사용하려는 model 과 어떻게 매칭을 시킬 것인가하는 문제와 컬럼 명을 어떻게 맞춰 줄 것인가 하는 문제가 생긴다. Cakephp 의 Auth 를 이용하면 기타 세션에 대한 관리 및 사용자 인증 정보등을 $this->Auth 란 넘과 $this->Session 이용해서 쉽게 처리할 수 있는 건 알겠는데 지들끼리 User 란 모델과 username, password 를 써서 돌리니 이것 참 답답한 노릇이다. 난 Member 란 모델과 loginid, pwd 를 사용하고 싶은데 말이지.
Member 에 대한 처리는 지난 Post에서 다뤘으니 이제 Auth 를 다뤄보자.
제일 먼저 해야 할 일은 "app/Controller/AppController.php" 를 수정하는 일이다. 사용자가 추가하는 모든 컨트롤들이 AppController 를 상속(?) 받는 다는 점에서 매우 중요하다는 점은 알겠고 이용은 어찌하면 좋을지는 천천히 알아보자.
주의 깊게 살펴봐야 하는 곳은 $components 의 'Auth' 부분과 beforeFilter 함수이다.
$components 의 'Auth' 에서 배열로 추가한 값은 로그인, 로그아웃 후에 어떻게 처리 할 것인가 어디로 보낼까의 문제이다. 알아서들 처리하면 될 문제고 난 메인 페이지로 보내 버리기로 했다. 다른 요구가 있다면 또 처리하면 될 문제이고
beforeFilter 에서 $this->Auth->authenticate 가 나오는데 이부분이 내가 처리하고자 하는 인증 방법과 그 인증 방법을 사용할 때 매칭할 모델, 컬럼 명에 대한 정보를 세팅하는 것이다. 맨 아래 $this->Auth->allow 는 인증 없이 보이게 할 페이지를 지정하는 것이다. 즐 어떤 컨트롤을 타더라도 'index', 'view', 'join' 이 세가지 액션에 대해서는 인증 없이 페이지를 보여주란 뜻이다. 특정 컨트롤에서 다른 액션을 추가하고 싶다면 beforeFilter 함수를 만들고 parent::beforeFilter(); 뒤에 $this->Auth->allow('list'); 를 추가해 주면 위의 세개에 list 가 허용 가능한 페이지로 세팅된다.
로그인 처리를 할 MemberController 에서는 아래와 같이
<?php echo $this->element('sql_dump'); ?> 를 이용해서 사용되는 쿼리를 살펴보면 그 내용을 알 수 있다.
일단 사이트를 띄우고 Member 란 모델까지 만들었다면 Member 를 이용한 로그인 기능과 어느 페이지에서든 로그인한 사용자의 정보를 읽고 사용할 수 있는 Sesseion 에 대한 처리를 해야겠지. Cakephp 에서는 인증에 대해 세가지를 지원한다. "Form", "Basic", "Digest"... Form 이야 누구나 알든 웹페이지의 입력칸에 아이디와 패쓰워드를 넣어서 사용하는 것이고, Basic 은 윈도우 기본 인증창을 띄우는 경우이고, Digest 는 Digest Http 를 이용하는 것이란다. 여기서 살펴 볼 방법은 어느 사이트에서나 쉽게 볼 수 있는 Form 인증 방법을 살펴 보자.
Cakephp 에서는 Form 인증을 사용할 경우 Users 란 모델을 사용한다. 하지만 우리가 DB 를 만들 때 Cakephp 전용으로 만들 것도 아니고 지난 post 에서 처럼 Member 란 테이블을 이용하는 경우 인증에서 사용하려는 model 과 어떻게 매칭을 시킬 것인가하는 문제와 컬럼 명을 어떻게 맞춰 줄 것인가 하는 문제가 생긴다. Cakephp 의 Auth 를 이용하면 기타 세션에 대한 관리 및 사용자 인증 정보등을 $this->Auth 란 넘과 $this->Session 이용해서 쉽게 처리할 수 있는 건 알겠는데 지들끼리 User 란 모델과 username, password 를 써서 돌리니 이것 참 답답한 노릇이다. 난 Member 란 모델과 loginid, pwd 를 사용하고 싶은데 말이지.
Member 에 대한 처리는 지난 Post에서 다뤘으니 이제 Auth 를 다뤄보자.
제일 먼저 해야 할 일은 "app/Controller/AppController.php" 를 수정하는 일이다. 사용자가 추가하는 모든 컨트롤들이 AppController 를 상속(?) 받는 다는 점에서 매우 중요하다는 점은 알겠고 이용은 어찌하면 좋을지는 천천히 알아보자.
public $components = array(
'Session',
'Auth' => array(
'loginRedirect' => array('controller' => 'main', 'action' => 'index'),
'logoutRedirect' => array('controller' => 'main', 'action' => 'index')
)
);
public function beforeFilter() {
// Pass settings in
$this->Auth->authenticate = array('Form');
$this->Auth->authenticate = array(
'Form' => array('userModel' => 'Member', 'fields' => array('username' => 'login_id'))
);
$this->Auth->allow('index', 'view', 'join');
}
주의 깊게 살펴봐야 하는 곳은 $components 의 'Auth' 부분과 beforeFilter 함수이다.
$components 의 'Auth' 에서 배열로 추가한 값은 로그인, 로그아웃 후에 어떻게 처리 할 것인가 어디로 보낼까의 문제이다. 알아서들 처리하면 될 문제고 난 메인 페이지로 보내 버리기로 했다. 다른 요구가 있다면 또 처리하면 될 문제이고
beforeFilter 에서 $this->Auth->authenticate 가 나오는데 이부분이 내가 처리하고자 하는 인증 방법과 그 인증 방법을 사용할 때 매칭할 모델, 컬럼 명에 대한 정보를 세팅하는 것이다. 맨 아래 $this->Auth->allow 는 인증 없이 보이게 할 페이지를 지정하는 것이다. 즐 어떤 컨트롤을 타더라도 'index', 'view', 'join' 이 세가지 액션에 대해서는 인증 없이 페이지를 보여주란 뜻이다. 특정 컨트롤에서 다른 액션을 추가하고 싶다면 beforeFilter 함수를 만들고 parent::beforeFilter(); 뒤에 $this->Auth->allow('list'); 를 추가해 주면 위의 세개에 list 가 허용 가능한 페이지로 세팅된다.
로그인 처리를 할 MemberController 에서는 아래와 같이
public function login() {
if(!empty($this->data))
{
if ($this->Auth->login()) {
//$this->redirect($this->Auth->redirect());
$this->redirect('/Users/mypage');
// 정상적으로 로그인 되었다면 원하는 페이지로 보내자 자칫 로그인 페이지에서 무한 반복 로그인메소드 실행 후 Sessein 생긴걸 form 페이지 띄우며 다시 지우고 그냥 보기엔 뭔가 잘못되어 로그인이 않된 것 같은 그런 상태를 반복 할 수 있다. 로그인 페이지에서 로그인 한 경우는 그런 반복의 늪에 빠질 공산이 있다.
} else {
$this->Session->setFlash(__('아이디와 패스워드를 확인해 주세요'));
}
}
}
public function logout()
{
$this->Auth->logout();
$this->redirect("/");
}
login.ctp 에서는 아래와 같이 <?php echo $this->Session->flash('auth'); ?>
<?php echo $this->Form->create('Member');?>
<div style="padding:20px;">
<fieldset>
<span class="joing_in">
<span class="item title"><span class="txt_point">*</span> <label for="login_id" class="txt_bold"> 아이디</label></span>
<span class="item"><?php echo $this->Form->text('Member.login_id' , array('class'=>'textStyle1','MAXLENGTH'=>'16'));?></span>
<span class="item"><span class="txt_point txt_small"></span>
</span>
</span>
<span class="joing_in">
<span class="item title"><span class="txt_point">*</span> <label for="Memail" class="txt_bold"> 비밀번호</label></span>
<span class="item"><?php echo $this->Form->password('Member.password' , array('class'=>'textStyle1','MAXLENGTH'=>'16'));?></span>
<span class="item"><span class="txt_point txt_small"></span>
</span>
</span>
<input type="image" src="/img/button/btn_login.gif" value="로그인"/>
</fieldset>
</div>
<?php echo $this->Form->end();?>
참 간단하다. 이제 Member 모델을 이용한 로그인이 가능하게되었다. 다만 아직 Member 테이블에 정보가 하나도 없으니 그냥 로그인 폼만 반복하는 좀 바보 같은 페이지가 완성되었다. <?php echo $this->element('sql_dump'); ?> 를 이용해서 사용되는 쿼리를 살펴보면 그 내용을 알 수 있다.
'뭐하는데 > 케잌피? 에취 피' 카테고리의 다른 글
| Cakephp 시작하기. 회원 로그인 처리하기 Auth components 이용하기. Cakephp 2.0 기준 (0) | 2012/03/17 |
|---|---|
| Cakephp 시작하기. 깔기 말고 뭔가 보이는 거 만들기. (0) | 2011/12/01 |
jQuery 이미지 롤링 조금 발전 시킨 버젼을 추가해 봅니다. 롤링이란 키워드가 일일 방문의 절대 다수로 이뤄지고 있기 때문에 지난 번 포스팅 했던 내용에 좀더 살을 붙이고 쓰임새가 좀더 있는 넘으로 즉 끌어 붙이만으로 나름 동작하는 버젼으로 발전 시켜서 혹시라도 이용할 사람들에게 조금이라도 보탬이 되고자 몇자 적어 봅니다.
개선된 내용
2011/11/24 - [뭐하는데/이따위로 만든다] - jQuery 롤링(Rolling) 이미지 처리
개선된 내용
- 링크 기능 추가(접힌 부분의 클릭 시 넓어지기, 넓혀진 부분의 클릭 시 링크로 이동)
- 이미지 갯수를 li 요소의 갯수로 대체
- 가려지는 시간과 보여지는 시간차로 인한 스크립트 오류 수정
- 하나의 파일에서 내용 확인 가능하도록 완성된 html 로 수정
- 이미지의 크기가 현재 코드에 부합하는 크기일꺼란 보장이 없다. 현재 코드 상으로는 넓이 350을 기준으로 이미지를 슬라이딩 하게 해놓은 상태이다. 즉 적용하고자 하는 부분에서 이미지 크기가 350 보다 크거나 작다면 원하는 크기의 이미지 크기로 코드를 수정해 주어야 한다.
- 가려지는 부분의 크기 역시 현재 80px 으로 고정된 상태이다. 이미지 넓이가 350px 인게 4개라고 했을 때 최조 보여지는 부분의 크기가 590px 이여야 한다. 600px 섹션에 뭔가를 꽉 체우려면 여분의 크기를 82.5로 제어해 주어야 한다. 즉 현재 80 으로 세팅된 부분을 82.5 또는 이미지의 갯수 크기에 따라 다르게 세팅해 주어야 한다는 점이다. 만약 350px 넓이에서 이미지가 롤링만 되길 원한다면 80 으로 표시된 부분을 0 으로 고쳐 주어야 한다. 내가 최초 원했던 컨셉은 뒤편의 이미지들이 삐죽이 보이게 하는 것이었습니다.
최종 소스 확인
2011/11/24 - [뭐하는데/이따위로 만든다] - jQuery 롤링(Rolling) 이미지 처리
'뭐하는데 > 이따위로 만든다' 카테고리의 다른 글
| jQuery를 이용한 이미지 롤링(Rolling) 두번째 (2) | 2012/01/17 |
|---|---|
| 깔끔한 입력폼 만들기 (0) | 2012/01/08 |
| jQuery 롤링(Rolling) 이미지 처리 (0) | 2011/11/24 |
| 웹에서 아래한글...(로컬에 설치되어 있는 경우) (0) | 2010/07/15 |
| Microsoft의 새로운 검색 서비스 Bing (0) | 2009/09/01 |
| xml 출력하기 (0) | 2009/04/08 |
웹사이트 만들때 입력 폼을 그리는 일은 은근히 짜증나는 일인 것 같다. 단순 문자열 입력만 받으면 좋으련만 세상은 내가 생각하는 것만큼 단순하지도 않고 원하는 데이타 형태도 제 가각이니 말이다. 또 그 요소들의 배치나 배열 형태나 기타 적용될 CSS 까지 고민하기 시작하면 정말이지 갑갑한 일이 되기 쉬운것이 폼 디자인이라 생각한다. 그런데 나만 그런 생각을 가지고 있는게 아니었나보다. 이런 불편을 조금이라도 해소하고자 배색과 폼 요소 문자열, 문장, 날짜 기타 등등 10여가지 요소에 대한 입력 html 을 생성해 주는 사이트가 있네요... 일단 어지러운 폼을 보다 깔끔하게 만들 수 있다는 장접이 있습니다. 여러분도 이용해 보세요. 생각 보다 깔끔한 html 과 보기 부담스럽지 않은 입력 화면을 쉽게 만들 수 있습니다. 뭐 날짜 입력 부분이나 맘에 않드는 요소도 약간 있긴 하지만 그런 부분은 적당히 고치면 되고 일단 기본 폼이 있어야 고치는 것도 쉬우니가요...
http://www.phpform.org/
http://www.phpform.org/
- 기본 색상 선택
- 요소 선택
- 완료 화면
- 미리보기 화면
'뭐하는데 > 이따위로 만든다' 카테고리의 다른 글
| jQuery를 이용한 이미지 롤링(Rolling) 두번째 (2) | 2012/01/17 |
|---|---|
| 깔끔한 입력폼 만들기 (0) | 2012/01/08 |
| jQuery 롤링(Rolling) 이미지 처리 (0) | 2011/11/24 |
| 웹에서 아래한글...(로컬에 설치되어 있는 경우) (0) | 2010/07/15 |
| Microsoft의 새로운 검색 서비스 Bing (0) | 2009/09/01 |
| xml 출력하기 (0) | 2009/04/08 |
Prev

Rss Feed