当我的用户尝试注册时,我想通过检查外部身份存储库(例如,调用Web服务或查找目录服务器)来确保其信息有效。
任何现有模块都可以吗?如果没有,开发此功能的最佳方法是什么?
答案 0 :(得分:2)
我不知道现有模块允许添加自定义验证,但使用hook_user()
的'validate'操作实现此功能相当容易:
function yourModule_user($op, &$edit, &$account, $category = NULL) {
// Are we in the validation phase of a new user registration?
if ('validate' == $op && 'user_register' == $edit['form_id'] && 'account' == $category) {
// Yes, do custom validation...
// NOTE: Just an example to validate by email.
// Check the other elements in $edit array (e.g. 'name') for more options
$mail_is_valid = yourModule_custom_mail_validation($edit['mail']);
// Is the mail address OK?
if (!$mail_is_valid) {
// No, set error on mail form field
form_set_error('mail', t('your custom error message'));
}
}
}
只要yourModule_custom_mail_validation()
未返回TRUE,这将停止注册过程并重新显示注册表单和邮件字段上的错误消息。
如果您希望现有用户也可以对其帐户进行验证,则可以删除
&& 'user_register' == $edit['form_id']
部分来自第一个if子句 - 然后代码将针对每个用户编辑表单提交运行,而不仅仅是在注册时。
答案 1 :(得分:1)
如果您使用LDAP服务器进行身份验证,则可以使用LDAP module。检查一下。
要使用其他一些Web服务进行身份验证,您必须编写一个模块并实现hook_user,尤其是“登录”案例。如果在登录时,用户的凭据与您的Web服务中的凭据不匹配,则可以将其注销并显示消息。