2012-07-09 4 views
2

저는 Cake을 처음 접하고 그것을 배우기 위해 응용 프로그램을 작성합니다. 내 사용자 등록 시스템에 몇 가지 문제가 있습니다. CakePHP Auth 구성 요소가있는 고유 한 사용자 이름과 이메일

public function register() { 
    $this->set('title_for_layout', 'Register'); 
    if ($this->request->is('post')) { 
     $this->User->create(); 
     if ($this->User->save($this->request->data)) { 
      $this->Session->setFlash('The user has been saved'); 
      $this->redirect(array('action' => 'register')); 
     } else { 
      $this->Session->setFlash('The user could not be saved. Please, try again.'); 
     } 
    } 
} 

그리고이 방법이 내 User 모델 내에서

가 어디 암호 해시 : 지금까지 내 등록 코드 내 Users 컨트롤러에

이 작동
public function beforeSave() { 
    if (isset($this->data[$this->alias]['password'])) { 
     $this->data[$this->alias]['password'] = AuthComponent::password($this->data[$this->alias]['password']); 
    } 
    return true; 
} 

, 사용자가 추가됩니다 내 users 내 사용자 이름, 전자 메일 및 해시 암호를 사용하여 데이터베이스에있는 테이블. 그러나 사용자 이름과 전자 메일이 고유한지 확인하기 위해 수행되는 검사가 없습니다.

내 제한된 이해에서 사용자 이름과 이메일 입력란이 테이블에 입력되기 전에 고유한지 확인하려면 User 모델에 유효성 검사 규칙을 추가해야합니다. 순간 난 그냥이 유효성 검사 규칙이 있습니다

public $validate = array(
    'username' => array(
     'required' => array(
      'rule' => array('notEmpty'), 
      'message' => 'A username is required' 
     ) 
    ), 
    'email' => array(
     'required' => array(
      'rule' => array('notEmpty'), 
      'message' => 'An email is required' 
     ) 
    ), 
    'password' => array(
     'required' => array(
      'rule' => array('notEmpty'), 
      'message' => 'A password is required' 
     ) 
    ) 
); 

또한, 내 등록 양식은 passwordConf라는 Password (confirm) 필드가 있습니다. 사용자가 사용자 테이블에 입력되기 전에 사용자가 암호를 올바르게 입력했는지 확인하고 싶습니다. 그러나 어떻게해야하는지 잘 모르겠습니다. 나는 어딘가에 내 등록 방법에 두 암호가 같은지 확인해야 할 것 같아요.

도움 주셔서 감사합니다.

+0

을 설정하지? MySQL을 사용하고 있습니까? – SuperTron

+0

방금 ​​내 사용자 테이블에 두 개의 고유 키를 추가했습니다. 하나는 사용자 이름 용이고 다른 하나는 전자 메일 용입니다. 그러나 이제 Cake는 멋진 오류 메시지보다는 SQL 오류를 던집니다. 나는 응용 프로그램에서 그것을 할 수있는 방법이 있다고 확신한다. 나는 Cake 문서에서 그것을 어떻게 찾을 수 없는지 모른다. 어느 쪽이든 감사합니다, 그 고유 열쇠는 어쨌든 전에 추가 되었어야합니다 :) –

답변

3

실제로 CakePHP에는 사용자 이름과 전자 메일을 확인하는 데 사용할 수있는 isUnique이라는 유효성 검사 규칙이 있습니다. 내장 규칙 목록은 here입니다. 이 번호와 Data Validation Tutorial을 사용하여 사용자 이름과 전자 메일을 확인할 수 있습니다. 패스워드가 같은지 확인하는 것과 마찬가지로, 요청마다 매시간 유효성 검사 규칙을 만들 수 있다고 가정하고 규칙 목록에 표시된 EqualTo 규칙을 사용할 수 있습니다.

5

isUnique 규칙은 사용자 이름과 이메일 필드에서 작동합니다.

public $validate = array(
    'username' => array(
     'required' => array(
      'rule' => array('notEmpty'), 
      'message' => 'You must enter a username.' 
     ), 
     'length' => array(
      'rule' => array('between', 3, 15), 
      'message' => 'Your username must be between 3 and 15 characters long.' 
     ), 
     'unique' => array(
      'rule' => 'isUnique', 
      'message' => 'This username has already been taken.' 
     ) 
    ), 
    'password' => array(
     'required' => array(
      'rule' => array('notEmpty'), 
      'message' => 'You must enter a password.' 
     ), 
     'length' => array(
      'rule' => array('minLength', '6'), 
      'message' => 'Your password must be at least 6 characters long.' 
     ) 
    ), 
     'email' => array(
      'email' => array(
      'rule' => array('email'), 
      'message' => 'Please enter a valid email address.' 
     ) 
    ) 
); 
가 일치하는 경우, 단지 서로 암호를 사용자를 BeforeSave 콜백을 편집하고 확인 암호를 비교 진정한 반환으로

과 허위가있는 경우 : 다음은 필드 당 여러 규칙을 사용하는 방법을 보여줍니다 코드 샘플입니다 하지 마라. 이런 식으로 뭔가가 : 왜 사용자 테이블이 고유하게 이름/이메일이 필요하며, 그 준수하지 않는 행을 삽입하는 것을 허용하지 않도록 데이터베이스를

public function beforeSave() { 
    if (isset($this->data[$this->alias]['password'])) { 
     if($this->data[$this->alias]['password'] === $this->data[$this->alias]['passwordConf']) { 
      $this->data[$this->alias]['password'] = AuthComponent::password($this->data[$this->alias]['password']); 
      return true; 
     } else { 
      return false; 
     } 
    } 
    return true; 
} 
관련 문제