2010-06-21 51 views
0

我正在开发一个Drupal 6模块来提供基于OAuth的用户认证和注册。我已按照http://oauth.net/core/1.0a/#anchor9上的说明使用OAuth模块进行身份验证。下一步是使用服务提供商的自定义API使用验证后提供的信息创建用户帐户。在Drupal中进行外部认证后透明用户注册

根据http://drupal.org/node/497612#comment-3047302,我不应该使用user_external_login_register(),但请参阅OpenID模块了解如何正确登录外部用户。

研究的OpenID模块后,这里是我打算做:

  • 尝试加载现有用户的使用user_external_load()定制API结果authname的构建。
  • 如果用户存在,则使用user_external_login()登录用户。
  • 如果没有,假装登记表已经提交(如openid_authentication()一样)来创建一个新的用户帐户。如果需要任何附加信息以便用户注册,则将其重定向到预填表单。

这是正确的做法吗?除了OpenID之外,还有其他模块值得关注吗?

回答

0

你可以看看以前的Drupal模块。这个模块做了两件完全不同的事情(对于架构:))。 *它将信息生成到“运行Drupal”目录的中心。 (并提供了一个页面来显示这样一个目录!) *它允许登录其他Drupal网站的凭据。

后者是你正在寻找的。请注意,该模块已停止使用,不是因为登录方法做错了,而是因为DrupalID机制本身存在缺陷。它已被替换为openID和oauth。

http://drupalcode.org/viewvc/drupal/drupal/modules/drupal/drupal.module?hideattic=0&view=markup

钩子和方法,你要寻找(按顺序)为:

  • drupal_form_alter - 添加验证回调到登录表单小号
  • drupal_form_user_login_alter - 在登录表单中添加有关替代登录的信息。
  • drupal_distributed_validate - 验证回调:调用drupal_auth查看用户是否有效。如果是这样,调用user_external_login_register
  • drupal_auth - 帮助验证回调:确定凭据是否有效。

所有其他功能都是帮助功能,或提供该目录功能,或允许远程站点对我们的数据库进行身份验证。这两者都不会使用。

+0

谢谢你的提示。但是drupal_distributed_validate使用user_external_login_register(),根据http://drupal.org/node/497612#comment-3047302不应该使用它。我想这是因为它不强制执行额外的注册字段,并重新创建(本地用户,如果现有本地用户的名称与外部用户的名称不匹配) – 2010-06-22 11:42:09

+0

这是在d7中的强化。但D6,尽管不完美。 user_external_login_register()仍然是要走的路。或者,你可以自己重写这样的功能,并在那里强化它。 – berkes 2010-06-22 16:28:37