Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Joomla用户表获取密码,并在codeigniter应用程序中使用它们_Codeigniter_Joomla_Login_Md5_Salt - Fatal编程技术网

从Joomla用户表获取密码,并在codeigniter应用程序中使用它们

从Joomla用户表获取密码,并在codeigniter应用程序中使用它们,codeigniter,joomla,login,md5,salt,Codeigniter,Joomla,Login,Md5,Salt,在我的服务器上,我有一个运行Joomla的网站。在public_html中,我创建了一个新目录,在这个目录中,有我的Codeigniter应用程序。虽然我是Codeigniter和Joomla的新手,但我正在尝试使用Codeigniter构建一个登录表单。 我不想创建一个新表来存储用户信息,因为我在Joomla中已经有了这样的信息。我想从一个名为_users的Joomla表中检索用户信息用户名和密码,但问题是密码在Joomla中的存储方式不同。它使用md5和盐字符串。 这是我在Codeignit

在我的服务器上,我有一个运行Joomla的网站。在public_html中,我创建了一个新目录,在这个目录中,有我的Codeigniter应用程序。虽然我是Codeigniter和Joomla的新手,但我正在尝试使用Codeigniter构建一个登录表单。 我不想创建一个新表来存储用户信息,因为我在Joomla中已经有了这样的信息。我想从一个名为_users的Joomla表中检索用户信息用户名和密码,但问题是密码在Joomla中的存储方式不同。它使用md5和盐字符串。 这是我在Codeigniter中的模型:

<?php
Class User extends CI_Model{

function login($username, $password){
  $dbjoomla = $this->load->database('my_joomla_db');
  $dbjoomla-> select('id, username, password');
  $dbjoomla-> from('users');
  $dbjoomla-> where('username', $username);
  $dbjoomla-> where('password', md5($password));
  $dbjoomla-> limit(1);

  $query = $dbjoomla-> get();

    if($query -> num_rows() == 1){
     return $query->result();
    }
    else{
     return false;
    }
  }
 }
我能够连接到Joomla的用户表,因为$dbjoomla不是空的并且已设置,但是由于Joomla中存储的密码格式,代码还不能工作。我只能使用md5$密码检索它。
如何获取Joomla密码并在Codeigniter应用程序上进行验证?这可能吗?

我不知道Joomla是如何加密他们的密码的,但他们的数据库中可能有盐

首先选择->where'username',$username

然后,因为您应该得到1行,所以将使用->行方法而不是->结果

$dbjoomla = $this->load->database('my_joomla_db');
$q = $dbjoomla
           ->select('id, username, password, salt')
           ->from('users')
           ->where('username', $username)
           ->get();
$row = $q->row();
现在您有了包含加密密码的行&salt,让我们确保用户输入的密码是正确的。您必须查看Joomla以确保密码是如何加密的-这只是一个示例

$JoomlaEncryptedPassword = md5($PasswordGivenByUser.$row->salt);
if ( $JoomlaEncryptedPassword === $row->password ) {
   return $row;
}else{
   return FALSE;
}
如上所示,我们正在复制Joomla所做的加密&将其与数据库中存储的密码进行比较,如果信息正确,则返回该行,否则返回FALSE


现在,这个概念对您来说已经很清楚了,您所要做的就是浏览Joomla文件,看看它们是如何加密密码的,以便您可以实现它。

从您所说的md5和salt判断,我希望您知道这适用于Joomla 2.5。Bcrypt用于Joomla 3.2以后的版本,只是为了让您知道:我只需遵循Joomla身份验证和用户插件以及JUser中的代码即可。您永远不会获得用户的密码,您所能做的就是检查用户输入的密码是否与表中的加密密码匹配。除非您仔细研究过,否则请不要在身份验证方面胡闹。