0

我遵循CakePHP的基本Authentication tutorial。如果我添加一个用户,我无法与他一起登录。输入的意见应该没问题。 背景用户HASANDBELONGSTOMANY播客与连接表。使用电子邮件而不是用户名进行身份验证


控制器/ Userscontroller.php

public function add() { 
    if ($this->request->is('post')) { 
     $this->User->create(); 
     if ($this->User->saveAssociated($this->request->data)) { //saveAssociatied() is described below 
      $this->redirect(array('action' => 'index')); 
     } 

    } 
    $podcasts = $this->User->Podcast->find('list'); 
    $this->set(compact('podcasts')); 
} 

public function login() { 
    if ($this->request->is('post')) { 
     if ($this->Auth->login()) { 
      $this->redirect($this->Auth->redirect()); 
     } 
    } 
} 

型号/ user.php的

public $hasAndBelongsToMany = array(
    'Podcast' => array(
     'className' => 'Podcast', 
     'joinTable' => 'podcasts_users', 
     'foreignKey' => 'user_id', 
     'associationForeignKey' => 'podcast_id', 
     'unique' => false, 
    ) 
); 

//password encryption 
public function beforeSave($options = array()) { 
    if (isset($this->data[$this->alias]['password'])) { 
     $this->data[$this->alias]['password'] = AuthComponent::password($this->data[$this->alias]['password']); 
    } 
    return true; 
} 

AppModel.phpaccording to this

class AppModel extends Model { 
public function saveAssociated($data = null, $options = array()) { 
    foreach ($data as $alias => $modelData) { 
     if (!empty($this->hasAndBelongsToMany[$alias])) { 
      $habtm = array(); 
      $Model = ClassRegistry::init($this->hasAndBelongsToMany[$alias]['className']); 
      foreach ($modelData as $modelDatum) { 
       if (empty($modelDatum['id'])) { 
        $Model->create(); 
       } 
       $Model->save($modelDatum); 
       $habtm[] = empty($modelDatum['id']) ? $Model->getInsertID() : $modelDatum['id'];      
      } 
      $data[$alias] = array($alias => $habtm); 
     } 
    } 
    return parent::saveAssociated($data, $options); 
    } 
} 
+0

那么做你想实际上 –

+0

我想登录,显然。 – toefftoefftoeff

回答

0

解决方案:我希望通过电子邮件进行身份验证,这是我根据this answer.

所以申报我AppController.php看起来是这样的:

public $components = array(
     'Session', 
     'Auth' => array(
      'authenticate' => array(
       'Form' => array(
        'fields' => array('username' => 'email') 
       ) 
      ), 
      'loginRedirect' => array('controller' => 'xxx', 'action' => 'index'), 
      'logoutRedirect' => array('controller' => 'users', 'action' => 'login') 
     ) 
    ); 
相关问题