我正在为Joomla开发一个组件。它与流行的社交网站集成。我通过给定的社交个人资料从数据库中检索用户信然后,我尝试使用以下代码登录此用户:
$fbuser = $facebook->api(
'/me',
'GET',
array(
'access_token' => $_SESSION['active']['access_token']
)
);
// Get a database object
$db =& JFactory::getDBO();
$query = "SELECT * FROM #__users WHERE email = '".$fbuser['email']."';";
$db->setQuery($query);
$row = $db->loadRow();
if(isset($row))
{
$app = JFactory::getApplication();
$user =& JUser::getInstance($row[0]);
$credentials = array();
$credentials['username'] = $user->get('username');
$credentials['password'] = $user->get('password'); // When I change this to related users plain password then it works
$options = array();
$options['remember'] = true;
$options['silent'] = true;
$app->login($credentials, $options);
}
else
{
return 'There is no account associated with facebook';
}
问题是数据库返回编码密码,这不起作用。当我将解码的密码提供给$凭证时,它可以工作。可能是什么问题?
答案 0 :(得分:2)
一个选项是创建自己的身份验证插件(非常简单的任务),该插件可以使用只有您和站点知道的特定密码登录任何用户。
然后您可以提供该密码以及已知用户名。
为了安全起见,只允许该插件登录普通用户,而不是管理员。
答案 1 :(得分:0)
你需要MD5哈希pwd(它存储在数据库中的方式)。
试试这个:
$salt = '19IQYkelXrqVH1Eht6PFOIZRe5T1SQHs';
$pwd = md5_hex($pwd . $salt) .":$salt";
$query = "select name,username,email,password from jos_users where password = $pwd;";
...
答案 2 :(得分:0)
// --- login mamanam.com
$app = JFactory::getApplication();
$credentials = array();
$credentials['username'] = $username;
$credentials['password'] = $password;
$app->login($credentials);
数组中的必要参数$ credentials = array()用于登录函数Joomla! $ app->登录($凭证)
*对不起我的英语不太好