我已将Google身份验证插件复制到另一个API,但出于某种原因,它不会在Joomla中保存记录。如果我手动添加用户名和一些随机密码,那么我的插件会对API进行正确的身份验证 - 但是当尝试登录时,我会收到错误消息:"您无法访问此站点的私有部分。&#34 ;
我不一定要寻找编码帮助,我只是想知道Google身份验证插件是如何保存记录的。我已经多次通过插件寻找它,但我没有看到它。 我必须假设它与$ response有关,但我设置了google auth的每个值。要求保存记录的是什么?
编辑:
好的,显然我不知道用户如何登录Joomla。为什么这不起作用?
public function onUserAuthenticate($credentials, $options, &$response) {
// Load plugin language
$this->loadLanguage();
if (empty($credentials['password'])) {
$response->status = JAuthentication::STATUS_FAILURE;
$response->error_message = JText::_('JGLOBAL_AUTH_EMPTY_PASS_NOT_ALLOWED');
return false;
} else {
$response->status = JAuthentication::STATUS_SUCCESS;
$response->error_message = '';
$response->type = 'Mysite';
$response->email = $credentials['username'];
$response->username = $credentials['username'];
$response->fullname = $credentials['username'];
}
}
答案 0 :(得分:2)
对于搜索此内容并且一无所获的人,让我详细说明发生了什么。如果您的非库存Joomla授权模块最终似乎有效,但后端没有创建帐户,并且会立即向用户显示消息"您无法访问此站点的私有部分。",有几个可能的原因。
首先(也是最不可能的,因为你不得不一直这样做),股票中有一个选项"用户 - Joomla"插件标记为"自动创建用户"。它默认启用。如果您禁用它,那么通过您的自定义授权模块登录的用户将无法在本地获取为其创建的帐户,因此他们将成为访客。这就是为什么你不能访问"正在显示消息 - 默认情况下,访客无法查看内容。要解决此问题,您可以重新启用该自动创建选项(但是,我认为您有理由将其关闭?),或者您可以在站点范围内更改权限以允许访客访问注册用户可以访问的内容。或者您的自定义身份验证插件可以自己手动保存用户。
更可能的原因(根据我的经验)是在尝试保存新用户时抛出异常。与Joomla!中的大多数地方不同,这里的任何例外都是截获和隐藏的。这是因为auth模块成功,因此即使发生任何异常,也可以继续登录。但是,由于帐户无法保存,因此用户以Guest帐户登录。由于访客帐户无法访问任何内容(默认情况下),因此他们会显示该邮件,然后有效退出。
为了找到有关抛出异常的更多信息,我暂时更改了Joomla核心库的JUser类。 (在Joomla 3中,这是在libraries / joomla / user / user.php中。)查找save()函数,找到它在try {} catch块中的位置,并在catch中添加类似
die($e->getMessage());
这将显示在保存过程中发生的任何错误,而不是在地毯下静默扫描它们。
如果您需要有关异常发生位置的更多信息,可以通过打印异常的getTraceAsString()方法来获取堆栈跟踪:
die("<pre>".$e->getMessage()."\n\n".$e->getTraceAsString()."</pre>");
答案 1 :(得分:1)
我在尝试为我的网站创建一个身份验证插件之前遇到过这个问题。我非常努力地找到解决方案,为什么我的插件不起作用?为什么我一直得到:
您无法访问此网站的私人部分
问题不是我的插件,它完美无缺。但是已经在joomla中创建了一个具有相同用户名的帐户,该帐户未分配给任何用户组。这就是为什么在登录后,它会自动注销并发出错误。