最简单的做法是,
1. 实现form_alter() ,添加一个自定义的validate。
project_form_alter(&$form, &$form_sate, $form_id) {
if ($form_id == 'user_login' || $form_id == 'user_login_block') {
array_unshift($form['#validate'], 'project_user_login_validate');
}
}
2. 写validate函数,其中如果验证通过,赋值给$form_sate['uid']即可,其他不需要做
project_user_login_validate ($form, &$form_state) {
$username = $form_state['values']['name'];
$response = project_authentication_check_user($username, $form_state['values']['pass'] );
if ($response != false) {
user_external_login_register($username, 'project_authentication' );
$account = user_external_load($username);
$form_state['uid'] = $account->uid;
}
// else drop through to the end and return nothing - Drupal will handle the rejection for us
//不通过,可以不用管,drupal会继续处理。
}
3. 写自定义认证函数
function project_authentication_check_user($name,$password){
//根据用户名和密码,或者查询其他数据库,检查用户是否合法。
}