从Joomla用户表获取密码,并在codeigniter应用程序中使用它们
在我的服务器上,我有一个运行Joomla的网站。在public_html中,我创建了一个新目录,在这个目录中,有我的Codeigniter应用程序。虽然我是Codeigniter和Joomla的新手,但我正在尝试使用Codeigniter构建一个登录表单。 我不想创建一个新表来存储用户信息,因为我在Joomla中已经有了这样的信息。我想从一个名为_users的Joomla表中检索用户信息用户名和密码,但问题是密码在Joomla中的存储方式不同。它使用md5和盐字符串。 这是我在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
<?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中的代码即可。您永远不会获得用户的密码,您所能做的就是检查用户输入的密码是否与表中的加密密码匹配。除非您仔细研究过,否则请不要在身份验证方面胡闹。