问题描述 投票:0回答:1

// Login User public function login() { // Check if the user is already logged in if ($this->Session->check('Auth.User.id')){ // Redirect to login page $this->redirect($this->Auth->loginRedirect); } else{ // If the user is not logged in session_set_cookie_params(0); // If the request is a POST request if ($this->request->is('post')) { //get credentials $this->username = $this->request->data['User']['username']; $this->password = $this->request->data['User']['password']; $this->domain = $this->request->data['User']['domain']; //debug($this->username); debug($this->domain) ; if ($this->Auth->login() ) { // Successful login //Check if specific user exists in LDAP: $this->loadModel('LdapUser'); $this->ds = $this->LdapUser->isConnected(); //print_r('Ldap status: '. $this->ds); //debug($this->ds) ; //echo $this->ds; $this->isLdapUser = $this->LdapUser->isLdapUser($this->username . //debug($this->isLdapUser); if ( $this->username =='tsc' || $this->ds ){ if ($this->isLdapUser || 'tsc' ) { // Get all the user information and store in Session $this->User->id = $this->Auth->user('id'); $this->User->contain(array('User', 'Role' => array('Ui', 'Action.name'))); $this->Session->write('User', $this->User->read()); $actions = array(); foreach ($this->Session->read('User.Role.Action') as $key => $value){ array_push($actions, $value['name']); } $this->Session->write('User.Role.Action', $actions); // Render different layout depending on user type if($this->Session->read('User.Role.Ui.name') == Configure::read('usertype.msp')){ $this->Session->write('SessionValues.ui', Configure::read('usertype.msp')); $this->Auth->loginRedirect = array('controller' => 'PortStats', 'action' => 'index'); } else if($this->Session->read('User.Role.Ui.name') == Configure::read('usertype.tsc')){ $this->Session->write('SessionValues.ui', Configure::read('usertype.tsc')); $this->Auth->loginRedirect = array('controller' => 'PortStats', 'action' => 'index'); } else if($this->Session->read('User.Role.Ui.name') == Configure::read('usertype.superAdminUserType')){ $this->Auth->loginRedirect = array('controller' => 'uis', 'action' => 'index'); } // Redirect to main login page $this->redirect($this->Auth->loginRedirect); } else { // Failed login session_destroy(); $this->Session->setFlash(__('Login failed: access not granted'), 'default', array(), 'fail'); } } else { // Failed login session_destroy(); $this->Session->setFlash(__('Login failed: LDAP out of reach'), 'default', array(), 'fail'); } } else { // Failed login $this->Session->setFlash(__('Invalid username or password, please try again'), 'default', array(), 'fail'); } } } }

我得到:

Warning (2): ldap_bind() [http://php.net/function.ldap-bind]: Unable to bind to server: Invalid credentials [APP/Model/LdapUser.php, line 56] Warning (512): Model "User" is not associated with model "User" [CORE/Cake/Model /Behavior/ContainableBehavior.php, line 339]
我的猜测是,这可能是platofrms之间有案例敏感性的东西,但确实很困扰,在Ubuntu中不起作用。

[编辑]有我的用户模型:

<?php
 App::uses('AuthComponent', 'Controller/Component');
 class User extends AppModel {

public $name = 'User';
var $actsAs = array('Containable');

// Define which database to use
var $useDbConfig = 'myDb';

// Many-To-One relationship
var $belongsTo = array('Role');

// validation of input data
public $validate = array(
'username' => array(
'required' => array(
'rule' => 'notEmpty',
'message' => 'A username is required'
                ),
'isUnique' => array (
'rule' => 'isUnique',
'message' => 'This username already exists'
                )           
        ),
        'password' => array (
        'not_empty' => array (
        'rule' => 'notEmpty',
        'message' => 'The field "Password" cannot be empty'
        ),
        'between_chars' => array (
        'rule' => array ('between', 4, 10),
        'message' => 'Password must be between 4 and 10 chars'
                )
        ),
        'passwordVerify' => array(
        'not_empty' => array (
        'rule' => 'notEmpty',
        'message' => 'The field "Confirm Password" cannot be empty'
        ),
        'match_password' => array (
        'rule' => 'matchPasswords',
        'message' => '"Confirm Password" must be the same as "Password"'
                )
        ),
        'name' => array(
                'required' => array(
                'rule' => array('notEmpty'),
                'message' => 'A name is required'
                )
        ),
        'surname' => array(
        'required' => array(
        'rule' => array('notEmpty'),
        'message' => 'A surname is required'
                )
        ),          
        'role_id' => array(
                'valid' => array(
                        'rule' => 'notEmpty',
        'message' => 'Please enter a valid role',
                        'allowEmpty' => false
                )
        ),
        'oldPassword' => array (
                'match_password' => array (
                        'rule' => 'matchOldPassword',
                        'message' => 'Invalid password'
                ),
                'required' => array (
'rule' => 'requiredOldPassword',
'message' => '"Current Password" is required if you wish to edit the password'
                )
        ),
        'newPassword' => array (
        'required' => array (
        'rule' => 'requiredNewPassword',
    'message' => '"New Password" is required if you wish to edit the password'
                ),
                'between_chars' => array (
                        'rule' => 'lengthNewPassword',
    'message' => 'Password must be between 4 and 10 chars'
                )
        ),
        'newPasswordVerify' => array (
    'required' => array (
    'rule' => 'requiredNewPasswordVerify',
'message' => '"Confirm Password" is required if you wish to edit the password'
                ),
'match_password' => array (
'rule' => 'matchNewPasswordVerify',
'message' => '"Confirm Password" must be the same as "New Password"'
                )
        )
);

// Verify that password and password verification match when creating a new user
public function matchPasswords ($data) {
if ($this->data['User']['password'] == $this->data['User']['passwordVerify']) {  
                return true;
    } else {    
        return false;
    }           
}



public function matchOldPassword ($data) {


       if (!empty($this->data['User']['oldPassword'])){ // when an input is given for 
        'oldPassword'...
if ($_SESSION['User']['User']['password'] == 
     AuthComponent::password($this->data['User']['oldPassword'])) { // when password 
      is correct (equal to 'password')
            return true;
        } else { // when password is invalid (not equal to 'password')
            return false;
        }
    }
    return false; // default value when 'oldPassword' is empty
}

// Verify that a value for 'oldPassword' (current password) is given when 
    'newPassword' or 'newPasswordVerify' are also given during the procedure of 
     editing the password
public function requiredOldPassword ($data) {
if (!empty($this->data['User']['newPassword']) || !empty($this->data['User']
    ['newPasswordVerify'])){ // when an input is given for 'newPassword' or 
    'newPasswordVerify'...
if (!empty($this->data['User']['oldPassword'])){ // when an input is given for 
oldPassword...
            return true;
        } else { // when no input is given for oldPassword...
            return false;
        }
    }
    return false; // default value when 'newPassword' and 'newPasswordVerify' 
are left empty
}

// Verify that a value for 'newPassword' (current password) is given when 

public function requiredNewPassword ($data) {
    if (!empty($this->data['User']['oldPassword']) || 
!empty($this->data['User']['newPasswordVerify'])){ // when an input is given for   
 'oldPassword' or 'newPasswordVerify'...
        if (!empty($this->data['User']['newPassword'])){ 
            return true;
        } else { // when no input is given for newPassword...
            return false;
        }
    }
    return false; 
}

// Verify that 'newPassword' has an appropriate length
public function lengthNewPassword ($data) {
    if (!empty($this->data['User']['newPassword'])) { )>=4 && .
strlen($this->data['User']['newPassword'])<=10){ // when length is valid..
            return true;
        } else { // when length is invalid...
            return false;
        }
    }
    return false; // default value when 'newPassword' is left empty
}


public function matchNewPasswordVerify ($data) {
if ($this->data['User']['newPassword'] == $this->data['User']
['newPasswordVerify']) {
        return true;
    } else {
        return false;
    }
}


public function requiredNewPasswordVerify ($data) {
    if (!empty($this->data['User']['oldPassword']) || 
!empty($this->data['User']['newPassword'])){ // when an input is given for 
'oldPassword' or 'newPassword'...
        if (!empty($this->data['User']['newPasswordVerify'])){ // when an 
            return true;
        } else { // when no input is given for newPasswordVerify...
            return false;
        }
    }
    return false; // default value when 'oldPassword' and 'newPassword' are left empty
}

// Password stored with SHA1 (cakePHP default) or MD5 hashing algorithm
public function beforeSave($options = array()) {
    if (isset($this->data[$this->alias]['password'])) {
        $this->data[$this->alias]['password'] = 
AuthComponent::password($this->data[$this->alias]['password']);
        //$this->data['User']['password'] = md5($this->data['User']
['password']); // MD5 hashing algorithm
    }
    return true;
}

var $hasMany = array(
    'MspDashboard' => array(
        'className' => 'MspDashboard',
        'foreignKey' => 'user_id',
        'dependent' => false,
        'conditions' => '',
        'fields' => '',
        'order' => '',
        'limit' => '',
        'offset' => '',
        'exclusive' => '',
        'finderQuery' => '',
        'counterQuery' => ''
    )
);
   }

[编辑]: 我倾向于相信警告对我的问题不负责: 它发生在两个平台中,但不应该中断站点的汇集。

当Windows中的调试级别= 2时,我会看到:


但是,在Ubuntu中,我得到的只是这个屏幕:

    

512关联错误:

$this->User->contain(array('User', 'Role' => array('Ui', 'Action.name'))); windows

改变:

$this->User->contain(array('Role' => array('Ui', 'Action.name')));

ubuntu不包含模型本身。 LDAP错误似乎是这样的行:

php windows ubuntu cakephp ldap
1个回答
2
投票

我将从这样的代码开始进行调试:

var_dump($this->ds);
var_dump($user);
var_dump($pass);
$this->exists = ldap_bind($this->ds, $user, $pass);

拷贝 - 将这些数据放入某些LDAP工具中,并首先验证它们是正确的。

尝试此功能以获取更多错误信息:
http://php.net/manual/en/function.ldap-error.php

,神秘解决:
警告与此无关:

代码线是错误的:
if ($this->isLdapUser ||     'tsc' ) {
.......

用户TSC在本地DB中是管理员,并且在LDAP中不存在,因此肯定会从LDAP_BIND中获得时间,看起来Ubuntu平台会在浏览器超时上崩溃我的应用程序。相反,我的本地机器将在时间外等待并继续登录。

我刚刚修改了我的代码,所以管理用户'tsc' 将直接登录而无需从LDAP auth登录。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.