- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试部署一个 cakePHP 应用程序,它可以在 Windows 中正常工作。我使用 LdapUser 模型通过 Active Directory 进行身份验证:
Ldap 用户:
<?php
class LdapUser extends AppModel
{
var $name = 'LdapUser';
var $useTable = false;
var $myCompany_ldap = "x.x.x.x";
//var $myCompany_ldap_config = array ('basedn' => 'CN=x,DC=x,DC=x');
var $basedn = 'CN=x,DC=x,DC=x';
var $myCompany_ldap_domain = "x.x";
// var $user = "x@x.x";
// var $pass = "x!";
var $exists = false;
var $ds;
function __construct()
{
parent::__construct();
ini_set('max_execution_time', 300); //300 seconds = 5 minutes
$this->ds=ldap_connect( $this->myCompany_ldap );
// print_r($this->basedn);
// debug($this->ds);
// print_r($this->ds);
ldap_set_option($this->ds, LDAP_OPT_PROTOCOL_VERSION, 3);
print_r($this->res);
//debug($this->exists);
//print_r($this->exists);
}
function __destruct()
{
ldap_close($this->ds);
// $this->loadModel('Cookie');
// $this->Cookie->destroy();
}
function isConnected(){
return ldap_bind($this->ds, $this->basedn);
}
function isLdapUser($user, $pass){
$this->exists = ldap_bind($this->ds, $user, $pass);
// debug($this->exists);
//debug($user);
// debug($pass);
return $this->exists;
}
}
然后在 UserController 里面的登录函数:
// 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' => ''
)
);
}
[编辑]:我倾向于认为警告不对我的问题负责:它出现在两个平台中,但不应中断网站的功能。
所以当在调试级别 = 2 的 Windows 中时,我看到:
但是在 ubuntu 中,它看起来有问题,我得到的只是这个屏幕:
最佳答案
关于512关联错误:
$this->User->contain(array('User', 'Role' => array('Ui', 'Action.name')));
更改为:
$this->User->contain(array('Role' => array('Ui', 'Action.name')));
不包含模型本身。
关于LDAP错误,好像是这一行:
$this->exists = ldap_bind($this->ds, $user, $pass);
我会从一些像这样的代码开始调试:
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
关于windows - CakePHP:警告 (512):模型 "User"与模型 "User"无关 Windows 到 Ubuntu 部署,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18537109/
可不可以命名为MVVM模型?因为View通过查看模型数据。 View 是否应该只与 ViewModelData 交互?我确实在某处读到正确的 MVVM 模型应该在 ViewModel 而不是 Mode
我正在阅读有关设计模式的文章,虽然作者们都认为观察者模式很酷,但在设计方面,每个人都在谈论 MVC。 我有点困惑,MVC 图不是循环的,代码流具有闭合拓扑不是很自然吗?为什么没有人谈论这种模式: mo
我正在开发一个 Sticky Notes 项目并在 WPF 中做 UI,显然将 MVVM 作为我的架构设计选择。我正在重新考虑我的模型、 View 和 View 模型应该是什么。 我有一个名为 Not
不要混淆:How can I convert List to Hashtable in C#? 我有一个模型列表,我想将它们组织成一个哈希表,以枚举作为键,模型列表(具有枚举的值)作为值。 publi
我只是花了一些时间阅读这些术语(我不经常使用它们,因为我们没有任何 MVC 应用程序,我通常只说“模型”),但我觉得根据上下文,这些意味着不同的东西: 实体 这很简单,它是数据库中的一行: 2) In
我想知道你们中是否有人知道一些很好的教程来解释大型应用程序的 MVVM。我发现关于 MVVM 的每个教程都只是基础知识解释(如何实现模型、 View 模型和 View ),但我对在应用程序页面之间传递
我想realm.delete() 我的 Realm 中除了一个模型之外的所有模型。有什么办法可以不列出所有这些吗? 也许是一种遍历 Realm 中当前存在的所有类型的方法? 最佳答案 您可以从您的 R
我正在尝试使用 alias 指令模拟一个 Eloquent 模型,如下所示: $transporter = \Mockery::mock('alias:' . Transporter::class)
我正在使用 stargazer 创建我的 plm 汇总表。 library(plm) library(pglm) data("Unions", package = "pglm") anb1 <- pl
我读了几篇与 ASP.NET 分层架构相关的文章和问题,但是读得太多后我有点困惑。 UI 层是在 ASP.NET MVC 中开发的,对于数据访问,我在项目中使用 EF。 我想通过一个例子来描述我的问题
我收到此消息错误: Inceptionv3.mlmodel: unable to read document 我下载了最新版本的 xcode。 9.4 版测试版 (9Q1004a) 最佳答案 您没有
(同样,一个 MVC 验证问题。我知道,我知道......) 我想使用 AutoMapper ( http://automapper.codeplex.com/ ) 来验证我的创建 View 中不在我
需要澄清一件事,现在我正在处理一个流程,其中我有两个 View 模型,一个依赖于另一个 View 模型,为了处理这件事,我尝试在我的基本 Activity 中注入(inject)两个 View 模型,
如果 WPF MVVM 应该没有代码,为什么在使用 ICommand 时,是否需要在 Window.xaml.cs 代码中实例化 DataContext 属性?我已经并排观看并关注了 YouTube
当我第一次听说 ASP.NET MVC 时,我认为这意味着应用程序由三个部分组成:模型、 View 和 Controller 。 然后我读到 NerdDinner并学习了存储库和 View 模型的方法
Platform : ubuntu 16.04 Python version: 3.5.2 mmdnn version : 0.2.5 Source framework with version :
我正在学习本教程:https://www.raywenderlich.com/160728/object-oriented-programming-swift ...并尝试对代码进行一些个人调整,看看
我正试图围绕 AngularJS。我很喜欢它,但一个核心概念似乎在逃避我——模型在哪里? 例如,如果我有一个显示多个交易列表的应用程序。一个列表向服务器查询匹配某些条件的分页事务集,另一个列表使用不同
我在为某个应用程序找出最佳方法时遇到了麻烦。我不太习惯取代旧 TLA(三层架构)的新架构,所以这就是我的来源。 在为我的应用程序(POCO 类,对吧??)设计模型和 DAL 时,我有以下疑问: 我的模
我有两个模型:Person 和 Department。每个人可以在一个部门工作。部门可以由多人管理。我不确定如何在 Django 模型中构建这种关系。 这是我不成功的尝试之一 [models.py]:
我是一名优秀的程序员,十分优秀!