Authentication 通过外部站点登录Moodle

Authentication 通过外部站点登录Moodle,authentication,external,moodle,Authentication,External,Moodle,我正在设置一个Moodle环境,我需要用户能够通过外部站点使用其来自该站点的凭据登录。理想情况下,他们会去网站,登录,然后点击一个按钮,将发送给Moodle连同他们的帐户信息 一旦他们到达Moodle,Moodle将检查帐户信息是否已经存在。如果是这样,它将登录,否则它将创建帐户并登录 我已经设置了Moodle环境以及登录站点。Moodle站点不允许访问登录站点上的数据库,用户不应该在任何时候再次输入他们的信息 我已经花了几个小时试图从一个插件反向工作,该插件在Moodle和社交网站(faceb

我正在设置一个Moodle环境,我需要用户能够通过外部站点使用其来自该站点的凭据登录。理想情况下,他们会去网站,登录,然后点击一个按钮,将发送给Moodle连同他们的帐户信息

一旦他们到达Moodle,Moodle将检查帐户信息是否已经存在。如果是这样,它将登录,否则它将创建帐户并登录


我已经设置了Moodle环境以及登录站点。Moodle站点不允许访问登录站点上的数据库,用户不应该在任何时候再次输入他们的信息

我已经花了几个小时试图从一个插件反向工作,该插件在Moodle和社交网站(facebook、twitter、google+等)之间实现了类似的功能,但没有取得任何进展,也尝试从一个将Moodle与Joomla链接的插件反向工作,我在这里和其他论坛上搜索过任何我能找到的类似于我需要完成的事情,但都没有结果。任何帮助都将不胜感激

编辑:我忘了提到Moodle版本是2.5.4

编辑:下面将创建一个新用户,其数据将发布到“login/index.php”页面。这目前非常不完整,在生产服务器上实现可能很危险。更新的版本将被张贴,因为我将继续工作,建议是非常欢迎的

    global $CFG, $DB;
    require_once($CFG->dirroot.'/user/profile/lib.php');
    require_once($CFG->libdir.'/authlib.php');

    $newuser = $DB->get_record('user', array('id'=>'1'));
    $newuser->auth = 'manual';
    $newuser->username = $frm->username;
    $newuser->password = hash_internal_user_password($frm->password);

    $newuser->username = $DB->insert_record('user', $newuser);

    /// Save any custom profile field information
    profile_save_data($newuser);

    $newuser = $DB->get_record('user', array('id'=>$newuser->username));
    events_trigger('user_created', $newuser);

使用外部数据库身份验证可能是最容易设置的,尤其是当两个系统位于同一台服务器上时

转到站点管理>插件>身份验证>管理插件->单击外部数据库旁边的取消隐藏按钮

然后单击设置并添加数据库的连接详细信息、外部表的名称(如果数据来自多个表,则创建一个视图)并添加字段映射

或者,我会将SimpleSAML插件与LDAP结合使用——假设您有一个LDAP服务器——需要大约一天的时间来设置和处理设置


有一个类似的问题,我正在考虑一种方法

  • 让主站点每天创建一个额外的数据库,包含注册信息。我想将其作为SqLite文件提供,但moodle外部数据库插件似乎不支持SqLite数据库

  • 根据用户名和主站点上的访问控制逻辑,显示菜单“moodle”

  • 如果用户单击“moodle”,则在moodle和主站点之间发送一个post请求,要求moodle使用用户名和一个秘密令牌登录

  • 为moodle实现一个简单的身份验证插件,该插件要求主站点确认用户仍然登录。它将为此使用共享秘密令牌。如果主站点未确认用户已登录,则重定向到主站点的登录页面

但我不确定

  • 这种方法确实有效
  • 这种方法是合适的
  • 该方法已由某人实施

我研究过类似shiboleth的SSO内容,但它看起来相当复杂,很难实现,特别是因为我们的主站点已经有了身份验证方法。

您能发布一些示例代码、结构等吗?目前为止,我已经将其清理到标准Moodle登录结构。在登录站点端,我临时使用一个表单,并在提交时将其发布到Moodle登录页面。最终它会自动从登录站点的数据库中提取数据,但为了进行测试,我正在手动输入数据。@Lizz我已经找到了我需要的基本功能。我将更新我的帖子,包括我正在使用的代码,这是非常不完整的。我想我可以从我现在的位置找出其余的问题,但我会继续更新这篇文章,以帮助其他可能尝试我正在做的事情的人。Moodle站点不允许访问登录站点的数据库。