2013-06-27 5 views
0

나는 cakephp 2.x에 익숙하지 않기 때문에 이것을하는 법을 모른다. 나는 그의 이메일 주소와 전화 번호에서 사용자를 로그인하고 싶다. 내 의도는 데이터베이스에있는 숫자가 무엇인지이다. 이 "12345"및 사용자가이 번호 "+12345"를 통해 로그인하려고 시도하는 중입니다. 시스템에 로그인 할 수 있습니다. 코드를 작성했지만이를 사용하거나 인증 구성 요소 내에서 코드를 조정하는 방법을 모르겠습니다. 정식 구성 요소가 autometically 사용자가 로그온하는 것처럼 ... ..cakephp 전화 번호 확인

여기

여기 내 컨트롤러

public function beforeFilter() { 
    parent::beforeFilter(); 


    $this->Auth->authenticate = array(
     'Authenticate.Cookie' => array(
      'fields' => array(
       'username' => 'email', 
       'password' => 'password' 
      ), 
      'userModel' => 'User', 
      'scope' => array('User.active' => 1) 
     ), 
     'Authenticate.MultiColumn' => array(
      'fields' => array(
       'username' => 'email', 
       'password' => 'password' 
      ), 
      'columns' => array('email', 'mobileNo'), 
      'userModel' => 'User', 
     ) 
    ); 
} 




public function login() { 


    if ($this->Auth->login() || $this->Auth->loggedIn()) { 
     $this->redirect('/users/dashboard'); 
    }else{ 
    $this->layout='logindefault'; 
    $this->set('title_for_layout', 'Account Login'); 
    /*$this->Auth->logout(); 
    $cookie = $this->Cookie->read('Auth.User'); */ 


    if ($this->request->is('post')) { 




     if ($this->Auth->login() || $this->Auth->loggedIn()) { 
      if ($this->Session->check('Auth.User')){ 


      $this->_setCookie($this->Auth->user('idUser')); 
      $this->redirect('/users/dashboard'); 

     } }else { 
      $this->Session->setFlash('Incorrect Email/Password Combination'); 
     } 
    }} 
} 

입니다 내가 추가하려고하고있는 코드는 6,

$mobileNo='+123456789'; 
    if (strpos($mobileNo,'+') !== false) { 
     $mobileNo=str_replace("+", "",$mobileNo); 
    } 

?>

답변

0

워드 프로세서 (http://book.cakephp.org/2.0/en/models/data-validation.html#custom-validation-rules)는 사용자 정의 유효성 검사 규칙에 대한 예제가있다.

그러나 유스 케이스는 유효성 검사가 아닙니다 (로그인의 경우 정상적인 유효성 검사가 없으며 "스코프"만 적용될 수 있습니다). 로그인에 들어가는 데이터를 사용자 정의하는 방법. login() 메서드를 사용하여 Auth-> login() 호출 전에 들어오는 데이터를 수정하거나 새로운 2.x 방법 인 custom auth adapter를 사용할 수 있습니다.

// in your AppController::beforeFilter() method 
$this->Auth->authorize = array('PhoneNumber'); 

하고 PHONENUMBER 어댑터는 PhoneNumberAuthenticate 호출해야하고/컨트롤러/컴포넌트/인증에 위치.

다른 어댑터의 작동 방식에 대한 자세한 내용은 https://github.com/ceeram/Authenticate을 참조하고 자신의 어댑터에 적용하십시오. 당신의 교체 기기의 코드를 포함

public function login() { 
    $this->request->data['User']['email'] = $this->_replace($this->request->data['User']['email']); 
    if ($this->Auth->login()) {...} 

_replace와() :

그러나 당신은 또한 로그인 "이메일"을 사용하고 있기 때문에, 당신은 당신의 로그인 방법으로 대체 옵션을 사용하여 최선을 수 있습니다.

+0

당신이 그렇지 않으면 그것까지 .. 어떻게 내가 갇혀 나처럼 마음을 해달라고하면 다음 코드를 공유하기 전에 구현 또는이 기능에 작업 한 경우 여기 지금 바로 – hellosheikh

+0

didnt는 당신을 얻는다. .. 나는 누구를 바꾸고있다. .. 내가해야하고 싶은 것이. .. 내가 이메일, 번호와 숫자에서 사용자에게 로그인하고 싶다. .. – hellosheikh

+0

정확하게 arent 당신은 당신의 메소드에서'str_replace'를 사용하여 형식을 "통일"합니까? 그 코드를 컨트롤러 또는 모델의 고유 한 메소드 또는 인라인으로 배치하십시오. – mark

0

은 내가 이런 짓을했는지 그것은

작동 난 그냥 $ this-> Auth-> 로그인() $ this-> 요청 -> 데이터 [ '사용자'] [ '이메일'전에이 줄을 추가 ] = $ mobileNo;

소스 : 나는이 ... 할 수있는 방법을 잘 모릅니다 string concatenation when user log in Cakephp