【问题标题】:Joomla google authentication plugin saves new user recordJoomla google 身份验证插件保存新的用户记录
【发布时间】:2014-10-03 02:21:10
【问题描述】:

我为另一个 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'];
    }
}

【问题讨论】:

    标签: php joomla joomla3.0


    【解决方案1】:

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

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

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

    为了找到更多关于抛出什么异常的信息,我临时修改了 Joomla 核心库的 JUser 类。 (在 Joomla 3 中,它位于 library/joomla/user/user.php 中。)查找 save() 函数,并找到它在执行 try {} catch 块的位置,然后在 catch 中添加类似

    die($e->getMessage());
    

    这将显示保存过程中发生的任何错误,而不是默默地将它们扫到地毯下。

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

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

    【讨论】:

    • 我很欣赏这个答案,但这只是告诉我框架发生了什么。我通过重新安装 Joomla 回答了我自己的问题,但显然 Stack Overflow 管理员决定删除答案。
    • 但是你没有回答你的问题。你刚刚不再有问题了!您最初的问题仍未得到解答,普通的 Joomla 经理无法重新安装 Joomla 并希望能解决它。 (我的花了两个人和将近一个月的时间来配置。)我的意思是,知道你通过重新安装让它工作有点有用,但这实际上并不是对“这个身份验证插件有什么问题?”这个问题的“答案”。 "上述步骤将告诉您身份验证插件报告的错误,这将帮助您修复它们。不用抹去一个月的工作。
    • 我确实回答了我的问题 - “我的插件有什么问题?”回答:“没什么,是框架问题”。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-11
      • 2020-12-17
      • 1970-01-01
      • 2011-02-13
      • 1970-01-01
      • 2017-04-12
      • 2012-09-01
      • 1970-01-01
      相关资源
      最近更新 更多