在我的服务器上有一个运行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的user表(因为$dbjoomla不是空的,并且是设置的),但是由于存储在Joomla中的密码格式,代码还不能工作。我只能使用md5($password)检索它。如何获得Joomla密码并在我的Codeigniter应用程序上进行验证?这有可能吗?
发布于 2014-08-28 15:14:50
我不知道Joomla是如何加密他们的密码的,但是他们可能在数据库中有盐。
首先选择->where(‘用户名’,$username);
然后,由于您应该得到1行,所以您将使用->row()方法而不是->result()
$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文件,看看它们是如何加密密码的,这样您就可以实现它了。
https://stackoverflow.com/questions/25550014
复制相似问题