今天在网上看到一个帖子,讲的是“如何让ECSHOP也支持用邮箱登录、用手机号码登录”,$ J# x( h) T. o0 W4 G% d2 W
很多人跟帖说不能用,其实不是不能用,
# H6 y1 W. C9 u而是楼主提供的方法有一定的局限性,
& c" k6 y6 D$ D L3 e就是“用户登录”页面必须“启用验证码”,楼主那个方法才好使。
3 r) D+ b% w' g0 T3 D& m; m
" {; C* ]' I. _0 C今天“三个太阳(QQ: 2211707)”把他的代码完善了下,能够在任何情况下正常使用。
4 y: c* d, H) g$ O6 R# @其实很简单,就是把那段代码换了个位置就OK了。下来有时间,三个太阳会把它做成ECSHOP插件形式共享给大家
/ X0 e+ M6 A5 J% Z! a! E, c, v以下是具体的方法:: C: J) \' c- C) f
! C' c$ l5 b; [$ Q* F
修改 User.php 文件
# j* S! d- m$ i* o% d% R& w A# ?; u& h2 R2 T) G
找到7 P6 H' J% K. x* B+ S- v
+ o: ~! |& |6 E! V. i/ qif ($user->login($username, $password,isset($_POST['remember']))) | # G* x1 [" i, c& P$ Y
在它上边增加一段ECSHOP代码
# u u8 }/ I( U8 w* i
+ l- ?4 _% {# d, C1 }: A8 eif(is_email($username))
, B7 V# s. @; V8 {* u! y( i1 b{
4 d- N; z5 n. H$sql ="select user_name from ".$ecs->table('users')." where email='".$username."'";
/ }" w* A0 g: w' ?$username_e = $db->getOne($sql);
; H# V9 r ?/ h0 H) M( aif($username_e) $username=$username_e;
% P( h g, f8 C, p; u( C}
& |9 F" w7 B9 l9 cif(is_telephone($username))
) i& ?# P9 `& ]) t( X6 I{
P9 K- X$ O7 U' U1 D! g$sql ="select user_name from ".$ecs->table('users')." where mobile_phone='".$username."'";) @3 n; K) h4 a* a7 P Y+ ]3 {
$username_e = $db->getOne($sql);
, I- V+ i6 G6 h$ l6 \if($username_e) $username=$username_e;
1 l* u$ v1 m5 }7 ^& h} | - [/ H, I M! p3 X) V0 E
) j+ t9 L8 r6 \ U* Q继续在 user.php 的底部再增加一段代码' f1 B5 n: E" K: F" m2 M1 q
! @; z- Q2 l' O q3 [3 K& D
+ t8 `6 T: u8 k7 k4 t* x: Ffunction is_telephone($phone){. O& S5 t% {( o& b7 {; U- L
$chars = "/^13[0-9]{1}[0-9]{8}$|15[0-9]{1}[0-9]{8}$|18[0-9]{1}[0-9]{8}$/";% _0 W! e0 C- Q7 J
if (preg_match($chars, $phone)){
' Z/ ^2 Z: K* d5 Z& ?return true;8 R2 Y1 [+ Q; X5 B
}5 ^4 q6 T% m" R9 ]- K
} |
1 \7 b# Z. v, K9 r: m- C6 \5 r这样修改以后,即使你没启用验证码,也是OK的。感兴趣的朋友可以测试下。
, J( a/ h; O J7 P% |: ]. Y
* ~. k, w! P/ k! d不过这个代码还是有一定的BUG的,. q! L( K, ^2 b7 Q% N1 O
因为ECSHOP注册用户的时候,手机号码没有验证唯一性,; {0 } B$ b8 P7 B1 u
所以数据库中有可能存在不同用户名,同一个手机号的情况。& P1 x" f# y( {5 A$ Q
我们可以进一步修改ECSHOP代码,实现注册时验证手机的唯一性,
: a) E; K6 m8 f1 d P6 V0 b如果再能用短信形式验证手机的真实性,就更完美了,这只是后话,期待更完善。
( m0 B* r# @9 Y+ B6 Q' Q( f |