0

我是Drupal 的新手,但我只想破解/自定义 Drupal 7 的登录功能,比如硬编码。正如我发现的那样,Drupal 7 登录过程是由user.module及其相关文件处理的。

我只想知道当用户登录/身份验证过程通过仅提供用户名/密码来完成时返回或提供哪些类型的值或属性。

它返回的最终属性,以提供回我到目前为止刚刚注意到的 Drupal(在整个身份验证过程中)是:

  • 尝试用户的 {uid}
  • {rid} 用户的角色 ID
  • 用户电子邮件
  • 用户是否被阻止
  • 然后 .. ?

关键是..还有什么?
我可以替换/修改整个现有的身份验证过程吗?(根据我的需要)

例如,以下默认身份验证函数之一user.module

function user_authenticate($name, $password) {
    ..
    return $uid;
}

例如,如果我修改(硬编码)该函数以连接到我的其他外部数据库并返回 {user id},则 Drupal 将获得一个身份验证要求{uid}。那么还有什么要提供的呢?用户角色和..等等等等?

像那样..在身份验证过程中,我还应该触摸哪些其他功能和属性并将其提供给 Drupal?

4

2 回答 2

2

这不是一个实际的答案,但我不能将此作为评论发布。

基本上我们不破解核心。因此,查看 user.module 的代码不会比学习钩子对您有太大帮助。例如,通过查看 hook_nodeapi() 的代码,很难了解如何在创建节点时添加一些魔法。但是,如果您检查文档和返回/输入参数,完成这项工作会容易得多。

我首先使用 hook_form_alter() 向登录表单添加一个额外的提交处理程序。我已经从您那里看到了一些关于您的用例的其他线程,但不幸的是,很难为您提供示例代码。您可以看到其他模块如何实现额外的身份验证(例如:http ://bit.ly/LdRcm6 )。(查看“记住我”模块如何将复选框添加到登录表单和允许 twitter 登录的 twitter 模块)。

然后,您可以让 Drupal 像往常一样对用户进行身份验证,并且除了Drupal 的身份验证之外,还可以使用新的自定义功能。

Drupal 甚至可以连接到外部数据库,无论它是否是 Drupal。

正如您在许多函数中看到的那样,它们返回一个布尔值,有时返回用户 ID。user_load() 是加载基本用户对象的函数。

记住它是模块化的。一些模块可以使用 hook_user_load() 包含/删除/更改这些值。用户条款模块和配置文件模块就是一个很好的例子。当其他模块需要用户信息时,它包括配置文件字段信息。

单个用户不仅仅是一组信息。它可以在过程的任何部分进行修改。就这样做吧。使用您的模块来提供您的外部站点所拥有的信息。

{uid} of the attempted user
{rid} role id of the user
user email
user is blocked or not
user last login time.
user register date.
...

要查看站点的整个对象,请输入以下内容。

<pre>
<?php
$user_account = user_load (1);
print_r($user_account);
?>
</pre>

您可以在使用 php 过滤器的节点创建页面中输入此代码。

如果没有硬编码,您可以允许其他模块使用这些值。即使您的源数据库没有角色 ID,您也可以为它们提供角色 ID、用户 ID 等。

祝你好运!

于 2012-07-02T01:30:52.740 回答
1

Drupal 是一个可扩展的系统。不需要像“用户”模块那样在核心模块中进行“硬编码”。您应该更愿意探索允许扩展核心(以及贡献)模块的钩子系统。

如果您想从不同的数据库中获取用户 ID(我不清楚这个用例),您仍然可以使用 Drupal 数据库中的角色和其他用户数据。

于 2012-07-01T18:05:44.250 回答