• 전화하지 마셈
  • hyungseob@ssim.pe.kr
Codeigniter 3.x에서 4.x로 갈아 엎느라 기존 게시판 주소로 접근시 새 주소로 리다이렉션 된다.

Developerment [PHP]

[CI] Codeigniter 로그인 폼 리턴URL 처리하기

  • 빛그림
  • 560

코드이그나이터에서 폼검증을 이용한 로그인을 구현하는 부분에서 로그인을 실패하면 폼을 다시 로드는 하는 탓에 Get방식으로 전달하는 리턴URL이 사라지는 문제있다. 

그래서 그동안은 세션을 이용했지만 리턴URL을 포함하지 않은 로그인 페이지에서도 로그인 성공시 세션에 리턴URL이 있다면 그곳으로 이동을 해버리는 동작이 너무 마음에 안들어서 고민을 좀 해봤다.

 

1. 뷰-로그인 폼(application/view/login_form.php)

<form>과 </form>사이에 아래 코드를 넣는다.

$return_url = ($this->input->get('return_url')) ? $this->input->get('return_url') : $return_url;
echo form_hidden('return_url', $return_url);

 

2. 컨트롤러(application/controller/Auth.php

컨트롤러 화일인 Auth.php의 로그인폼을 호출/검증하는 메소드의 윗부분에 아래 코드를 넣는다.

// Return URL
if(!$this->input->post('return_url')) {
    $return_url = '';
} else {
    $return_url = $this->input->post('return_url');
}

 

폼검증 실패시 로그인 폼을 로드하는 코드 부분에 아래처럼 코드를 넣는다.(나의 경우 위와 동일한 메소드이다.)

$data['return_url'] = $return_url;
$this->load->view('sc_auth/login_form', $data);

 

그리고 로그인을 성공했을때는 아래처럼 리턴URL로 리턴을 하게 해주면 된다.

redirect($return_url);

 

로그인을 실패하여 로그인폼을 다시 로드하더라도 숨겨진 input폼에 리턴URL이 저장되어 있으므로 로그인을 성공하면 지정된 리턴URL로 잘 이동을 것이고, 또한 세션을 이용하지 않기 때문에 원하지 않는 순간에 강제적으로 리턴URL로 이동시켜버리는 일도 없을 것이다.


새댓글 등록