2009-03-06 5 views
1

인증 및 ACL 구성 요소가있는 CakePHP 1.2를 사용하고 있습니다.CakePHP 인증 구성 요소가 내 비밀번호를 해킹하지 않는 이유는 무엇입니까?

내 사용자 등록 작업에서 암호가 손상되지 않습니다. 특히,이 표현 :

if ($this->data['User']['password'] != 
    $this->Auth->password($this->data['User']['confirm_password'])) 

이 true로 평가하고, 내가 passwordconfirm_password에 대해 동일한 값을 제출하더라도. Auth->password에 대한 호출을 제거하면 표현식이 false로 평가되기 때문에 암호가 손상되지 않습니다.

인증 모듈이 자동으로 암호를 해시 할 것으로 예상했습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 여기

<?php 
    echo $form->create('User', array('action' => 'register')); 

    echo $form->input('email', 
         array('after' => $form->error(
         'email_unique', 'This email is already registered.'))); 
    echo $form->input('password'); 
    echo $form->input('confirm_password', array('type' => 'password')); 
    echo $form->end('Register'); 
?> 

는 사용자의 컨트롤러에서 내 등록 작업입니다 : 여기

내보기 여기

function register(){ 
    if ($this->data) { 
     if ($this->data['User']['password'] != 
      $this->Auth->password($this->data['User']['confirm_password'])) { 

      $this->Session->setFlash(__('Password and Confirm Password must match.', true)); 
      $this->data['User']['password'] = ''; 
      $this->data['User']['confirm_password'] = ''; 
     } 
     else{ 
      $this->User->create(); 
      if ($this->User->save($this->data)){ 
       $this->redirect(array('action' => 'index'), null, true); 
      } 
      else { 
       $this->data['User']['password'] = ''; 
       $this->data['User']['confirm_password'] = ''; 
       $this->Session->setFlash(__('Some problem saving your information.', true)); 
      } 
     } 
    } 
} 

그리고 내 나는 AuthAcl 모듈을 포함 appController :

class AppController extends Controller { 
    var $components = array('Acl', 'Auth'); 

    function beforeFilter(){ 
     if (isset($this->Auth)) { 
      $this->Auth->allow('display'); 
      $this->Auth->fields = 
       array(
       'username' => 'email', 
       'password' => 'password'); 
      $this->Auth->authorize = 'actions'; 
     } 
    } 
} 

내가 뭘 잘못하고 있니?

답변

2

사용자 이름에 제출 된 값이 없으면 CakePHP는 암호를 해시하지 않습니다. 사용자 이름 입력란을 이메일로 바꿉니다. 그러나 Auth-> fields 배열을 설정하여 해당 필드를 다시 매핑했습니다. 그러나, 나는 appController 대신에 userController를 사용했다. 그래서이 줄을 움직이면 :

$this->Auth->fields = array('username' => 'email', 'password' => 'password'); 

out of appController from userController 해결했습니다.
이제 "appController에서 Auth -> 필드를 재설정 할 수없는 이유는 무엇입니까?"당신은 아마 당신의 UsersController::beforeFilter().

AppController::beforeFilter()을 무시하고

0

내가 당신이이 페이지에서

hashPasswords ($data) 

모습을 찾고있다 생각합니다. 그들은 올바른 방향으로 당신을 가리켜 야합니다. 코어 구성 파일에서 디버깅 수준을 변경해보십시오. 0 (프로덕션)에서 3으로 변경하면 SQL 출력을 볼 수 있습니다. 도움이 될 수 있습니다.

AuthComponent-Methods

Cakephp troubleshooting

미안 내가 올바른 방향으로 포인트 당신 그러나 아무것도 할 수 없습니다. 나는 cakephp를 처음 사용합니다.

1

데이터베이스에 저장하기 전에 암호를 해시해야합니다. 에 (

if(in_array($this->action, array('register'))) { 
    $this->Auth->fields = array('username' => 'email', 'password' => 'wrongfield'); 
} 

암호가 등록 과정에서 해시되지 않음을 의미 : 당신의 사용자 모델에이 기능을 장소 :

function beforeSave() { 
    if(isset($this->data[$this->alias]['password'])) 
    $this->data[$this->alias]['password'] = Security::hash($this->data[$this->alias]['password'], null, true); 
    return true; 
} 

그리고 사용자의 컨트롤러에 beforeFilter()에 넣고하는 것을 잊지 마세요 등록 양식 검증에 실패한 경우).

+0

를 수정,하지만 난 한 가지에 혼란 스러워요 - 등록 할 때 암호를 해시하지 않도록 암호를 지정하는 경우 - 암호는 어떻게 작동합니까? 아니면 언제 해시 할 것입니까? – Dave

2

은"을 참조하십시오. 그것이 바로 함수의 시작 부분에 parent::beforeFilter()을 넣어 "이 멋진 소리