繁体   English   中英

Joomla Google身份验证插件保存新的用户记录

[英]Joomla google authentication plugin saves new user record

我已经为另一个API复制了Google身份验证插件,但是由于某种原因,它没有将记录保存在Joomla中。 如果我手动添加用户名和一些随机密码,那么我的插件会正确地针对API进行身份验证-否则,当尝试登录时,我会收到错误消息:“您无法访问此网站的私有部分。”

我并不是在寻找编码帮助,我只是想知道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'];
    }
}

对于谷歌搜索人员却一无所获的人,让我详细说明正在发生的事情。 如果您的非库存Joomla授权模块似乎可以正常工作,但是在后端没有创建帐户,并且立即向用户显示消息“您无法访问此网站的私人部分”,则可能有两种情况原因。

首先(也是最不可能的,因为您必须竭尽全力做到这一点),库存的“ User-Joomla”插件中有一个选项标记为“自动创建用户”。 默认情况下启用。 如果禁用它,则通过您的自定义授权模块登录的用户将不会在本地为其创建帐户,因此他们将成为来宾。 这就是为什么显示“您无法访问”消息的原因-默认情况下,访客看不到东西。 要解决此问题,您可以重新打开该自动创建选项(但是我想您有理由将其关闭?),或者可以在整个站点范围内更改权限,以允许访客访问注册用户可以使用的权限。 或者您的自定义身份验证插件可以自己手动保存用户。

根据我的经验,更可能的原因是尝试保存新用户时引发了异常。 与Joomla!中的大多数地方不同,这里的任何异常都会被拦截和隐藏。 这是因为auth模块成功完成,因此尽管发生任何异常,登录仍可以继续进行。 但是,由于无法保存该帐户,因此该用户以来宾帐户身份登录。 由于来宾帐户无法访问任何内容(默认情况下),因此会向他们显示该消息,然后有效注销。

为了找到有关引发异常的更多信息,我临时更改了Joomla核心库的JUser类。 (在Joomla 3中,这是在librarys / joomla / user / user.php中。)查找save()函数,并找到它在哪里进行try {} catch块,然后在catch中添加类似的内容

die($e->getMessage());

这将显示在保存过程中发生的任何错误,而不是在地毯下悄悄地将它们清除。

如果您需要有关异常发生位置的更多信息,则可以通过打印出异常的getTraceAsString()方法来获取堆栈跟踪:

die("<pre>".$e->getMessage()."\n\n".$e->getTraceAsString()."</pre>");

在尝试为我的网站创建身份验证插件时,我遇到了这个问题。 我非常努力地寻找为什么我的插件不起作用的解决方案? 以及为什么我不断得到:

您无法访问该网站的私人部分

原来问题不是我的插件,它可以完美运行。 但是已经在joomla中创建了一个具有相同用户名的帐户,该帐户尚未分配给任何用户组。 这就是为什么登录后会自动注销并给出该错误的原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM