2012.03.17 15:07

Cakephp 시작하기. 회원 로그인 처리하기 Auth components 이용하기. Cakephp 2.0 기준

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 를 상속(?) 받는 다는 점에서 매우 중요하다는 점은 알겠고 이용은 어찌하면 좋을지는 천천히 알아보자.

	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'); ?> 를 이용해서 사용되는 쿼리를 살펴보면 그 내용을 알 수 있다. 
저작자 표시
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 2 Comment 0
2012.01.17 14:41

jQuery를 이용한 이미지 롤링(Rolling) 두번째

jQuery 이미지 롤링 조금 발전 시킨 버젼을 추가해 봅니다. 롤링이란 키워드가 일일 방문의 절대 다수로 이뤄지고 있기 때문에 지난 번 포스팅 했던 내용에 좀더 살을 붙이고 쓰임새가 좀더 있는 넘으로 즉 끌어 붙이만으로 나름 동작하는 버젼으로 발전 시켜서 혹시라도 이용할 사람들에게 조금이라도 보탬이 되고자 몇자 적어 봅니다.

개선된 내용
  1. 링크 기능 추가(접힌 부분의 클릭 시 넓어지기, 넓혀진 부분의 클릭 시 링크로 이동)
  2. 이미지 갯수를 li 요소의 갯수로 대체
  3. 가려지는 시간과 보여지는 시간차로 인한 스크립트 오류 수정
  4. 하나의 파일에서 내용 확인 가능하도록 완성된 html 로 수정
아직 해결하지 않은 부분
  1. 이미지의 크기가 현재 코드에 부합하는 크기일꺼란 보장이 없다. 현재 코드 상으로는 넓이 350을 기준으로 이미지를 슬라이딩 하게 해놓은 상태이다. 즉 적용하고자 하는 부분에서 이미지 크기가 350 보다 크거나 작다면 원하는 크기의 이미지 크기로 코드를 수정해 주어야 한다. 
  2. 가려지는 부분의 크기 역시 현재 80px 으로 고정된 상태이다. 이미지 넓이가 350px 인게 4개라고 했을 때 최조 보여지는 부분의 크기가 590px 이여야 한다. 600px 섹션에 뭔가를 꽉 체우려면 여분의 크기를 82.5로 제어해 주어야 한다. 즉 현재 80 으로 세팅된 부분을 82.5 또는 이미지의 갯수 크기에 따라 다르게 세팅해 주어야 한다는 점이다. 만약 350px 넓이에서 이미지가 롤링만 되길 원한다면 80 으로 표시된 부분을 0 으로 고쳐 주어야 한다. 내가 최초 원했던 컨셉은 뒤편의 이미지들이 삐죽이 보이게 하는 것이었습니다.
아래 고쳐진 코드를 하나의 html 로 묶어서 보기 좋게 다시 편집해 두었습니다.

최종 소스 확인


2011/11/24 - [뭐하는데/이따위로 만든다] - jQuery 롤링(Rolling) 이미지 처리

 
    
    
저작자 표시
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 3
2012.01.08 17:14

깔끔한 입력폼 만들기

웹사이트 만들때 입력 폼을 그리는 일은 은근히 짜증나는 일인 것 같다. 단순 문자열 입력만 받으면 좋으련만 세상은 내가 생각하는 것만큼 단순하지도 않고 원하는 데이타 형태도 제 가각이니 말이다. 또 그 요소들의 배치나 배열 형태나 기타 적용될 CSS 까지 고민하기 시작하면 정말이지 갑갑한 일이 되기 쉬운것이 폼 디자인이라 생각한다. 그런데 나만 그런 생각을 가지고 있는게 아니었나보다. 이런 불편을 조금이라도 해소하고자 배색과 폼 요소 문자열, 문장, 날짜 기타 등등 10여가지 요소에 대한 입력 html 을 생성해 주는 사이트가 있네요... 일단 어지러운 폼을 보다 깔끔하게 만들 수 있다는 장접이 있습니다. 여러분도 이용해 보세요. 생각 보다 깔끔한 html 과 보기 부담스럽지 않은 입력 화면을 쉽게 만들 수 있습니다. 뭐 날짜 입력 부분이나 맘에 않드는 요소도 약간 있긴 하지만 그런 부분은 적당히 고치면 되고 일단 기본 폼이 있어야 고치는 것도 쉬우니가요... 

http://www.phpform.org/  

  1. 기본 색상 선택

     
     
  2. 요소 선택
      
  3. 완료 화면

     
  4. 미리보기 화면

 
 
저작자 표시
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0


티스토리 툴바