国外设计欣赏网站 - DOOOOR.com

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,微信登陆

搜索

[Drupal教程] Drupal 7 中文教程 简单的同步登陆 Drupal7同步Drupal6的用户

[复制链接]
发表于 10-13-2011 02:23 | 显示全部楼层 |阅读模式
<?php
& F" P# L. u, M$ R2 g/**
8 f- ~  v, ^1 }4 p! p+ A * @file
' n: z9 m6 X7 E! G/ d * 当登录Drupal7站点时,检查是否在drupal6站点存在这个帐户,& [6 H  T4 \2 O; z* P, ^
* 如果存在,将其保存到新的站点.
0 B+ }8 B, F: M1 V: ~2 F2 U7 | */
* h2 S+ N" P2 a( o/**
1 k2 ^0 I1 S. g+ S0 d * 实现钩子hook_form_FORMID_alter().1 I2 w2 T, T# R2 @6 _  }
*/
0 k& K; f. {# L3 Pfunction d6user_form_alter(&$form, &$form_state, $form_id){
- x6 t# D9 x" j3 c$ t  //这里我们对于表单user_login,user_login_block同时添加了一个验证器! m8 X6 K6 k/ V
  if($form_id == 'user_login' || $form_id == 'user_login_block'){2 V; h7 n! u4 K8 U) l8 I$ o
   $form['#validate'] = d6user_login_default_validators();
# `# }* ]0 P1 E. ` }# H3 |8 T+ d+ d
}  {% g6 v0 L0 P, X1 {4 j% Q$ }
/**+ s/ f" K; e1 l+ W
* 我们自己的登录验证函数集合,.
& X: H, z$ ]/ N9 k) t8 E */
, L0 M( R: P" J1 s; [function d6user_login_default_validators(){
' Z( r$ p& u" s  //注意这里面保留了Drupal自带的验证器,只是在中间加上了一个自定义的验证器。这些验证器的执行存在先后顺序的
" o$ T. b- K0 I5 |; o6 Y  return array('user_login_name_validate', 'd6user_user_form_validate', 'user_login_authenticate_validate', 'user_login_final_validate');3 h" x( C* }. `) K7 u. z
}
) i/ i, {4 F6 k: D1 \; w) F: D6 a- L/**
6 Q; N; T7 \6 F# W) L3 f4 I * 我们自己定义的登录验证函数,它在user_login_authenticate_validate前面执行.9 t8 D, n' q% {% j  c
*/
$ l. l' H6 ~0 e! t% y; tfunction d6user_user_form_validate($form, &$form_state){$ Q- L' s% V! S( n! k
  //form_set_error('name',t('用户名,密码不匹配.')); 这里保留了调试信息' ^$ c7 I9 c' A9 o7 e
  $name = $form_state['values']['name'];
* e9 N' s  B: `/ I, k  k0 h/ M $pass = $form_state['values']['pass'];+ b5 R9 T- o# j! J* y
if (!empty($name) && !empty($pass)) {3 c" ?1 |: ~" G: f4 z9 h
   //drupal_set_message('123'); 这里保留了调试信息,用户调试代码,方便大家测试
" y) M- g% w' |# k1 m1 ?! c; r   $account = db_query("SELECT * FROM {users} WHERE name = :name ", array(':name' => $name))->fetchObject();, T- o6 [* Z9 l4 q4 D6 w
  //如果用户名存在,则返回.
. k  Z0 F; P" P1 }  ]* ^  if ($account) {+ @, {+ \) T. \, R: H
    return;/ `& w5 B; p; t- ^. I  N
  }else{
& ]! b9 k1 w) M& ~2 c( H; N7 ?+ P; O( D   // $sql = "SELECT * FROM {users} WHERE name = :name AND pass = :pass";
- z# Q. h8 B7 O+ O) b! B, u   //drupal_set_message('123456');
- l1 n$ F4 a. G7 y7 q% j2 o   //我们向Drupal6站点的用户表进行查询,检查该用户是否存在。
% y% D! p* s$ F$ f   db_set_active('d6user');$ t. n- z% X4 F8 W2 n! A* c6 u
   $account = db_query("SELECT * FROM users WHERE name = :name AND pass = :pass", array(':name' => $name, ':pass' => md5($pass)))->fetchObject();; |9 a' W) o8 X% N
   db_set_active('default');/ ^( {% u8 X# K6 [- B
   if($account){
. \- R$ C  S9 q/ p    // drupal_set_message('1234567');
' P0 ^5 x( ?+ [% l0 D$ |/ \* e4 I        //此时,用户帐号在Drupal6中存在,并且用户名密码正确9 T" i, i' p6 D2 w
    $userinfo = array(
" }% R! Y; V. J- X- h     'name' => $name,  a! I6 q1 |& n
     'pass' => $pass,# ?9 V! v( j8 S& c, n
     'mail' => $account->mail,
& T1 d6 w! k) D/ v& ~4 K+ E     'init' => $name,
2 F2 G7 O7 f. z' y. O7 |. H, P     'status' => 1,
4 S7 s2 X+ Y6 r3 a5 ~# m6 n     'access' => REQUEST_TIME8 r# \2 J4 b6 o. ]
    );$ |0 m; A/ D  N1 ?
    //我们将查询到的信息保存到Drupal7的用户表中1 \# x# p% x/ F4 {2 ?, S7 [5 F
    $account = user_save(drupal_anonymous_user(), $userinfo);
3 o0 R& t' k4 V' ?* M, ^. }   }
) q0 m, ~; G( c* o; C5 D  `  }
' y5 t; _# I9 A" d, x+ c. l% R! P }/ [. c2 v  A- E; c" ^( A5 e* S% X# X
}; w8 I' b3 @. l- a& q* z9 @

8 ^+ w1 x% U! |* n" Y; N

|2011-2026-版权声明|平台(网站)公约|DOOOOR 设计网 ( 吉ICP备2022003869号 )

GMT+8, 6-20-2025 09:30 , Processed in 0.408402 second(s), 59 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表