Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

[发布] [选峰工作室HACK]一行段码实现使用邮箱登陆DZ各版本

[复制链接]
选峰工作室 发表于 2009-6-12 16:43:04 | 显示全部楼层 |阅读模式
本帖最后由 选峰工作室 于 2009-6-14 23:52 编辑

logging.php

DZ60中查找
  1. $member = $db->fetch_first("SELECT m.uid AS discuz_uid, m.username AS discuz_user, m.password AS discuz_pw, m.secques AS discuz_secques,
  2.                                         m.adminid, m.groupid, m.styleid AS styleidmem, m.lastvisit, m.lastpost, u.allowinvisible
  3.                                         FROM {$tablepre}members m LEFT JOIN {$tablepre}usergroups u USING (groupid)
  4.                                         WHERE m.$field='$username'");
复制代码
DZ61中查找

  1. $ucresult = uc_user_login($username, $password, $loginfield == 'uid');
复制代码
DZ70中查找
  1. $ucresult = uc_user_login($username, $password, $loginfield == 'uid', 1, $questionid, $answer);
复制代码
DZ版本的代码的上一行,加以下代码即可实现。
  1.                         //启用邮箱登陆,选峰工作室,yxfstudio.cn
  2.                 if(isemail($username)) $username=$db->result_first("SELECT `username` FROM `{$tablepre}members` WHERE `email` LIKE '$username' limit 0,1");
  3.                 //启用邮箱登陆,选峰工作室,yxfstudio.cn
复制代码
这个有一个问题就是,如果会员是使用邮箱名来注册用户名的话,那么,用此邮箱名称登陆可能会登陆到另一个以此为邮箱的用户上,假设这个存在的话。虽然这种冲突的概率很小,但是存在。但是,不用太担心,不同用户一般密码不同!除非A用户的用户名为B用户的邮箱,且A用户的密码与B用户的密码相同,则B用户用邮箱登陆的时候,会进入A用户的账号上。

解决的方法是在登陆的时候再加一个选项,使用邮箱登陆,并在代码里加个判断,才是正确的方法,这个只是个简单的解决办法。

哪天有空的时候我更新一下。

评分

1

查看全部评分

柒瑞爱心天使 发表于 2009-6-12 16:48:54 | 显示全部楼层
呵呵,的确好像看到过。。
回复

使用道具 举报

 楼主| 选峰工作室 发表于 2009-6-12 16:52:11 | 显示全部楼层
2# 柒瑞爱心天使

这个东西谁写基本都差不多这个思路和代码。
回复

使用道具 举报

52qingshu 发表于 2009-6-12 17:03:52 | 显示全部楼层
不错 支持选峰工作室
回复

使用道具 举报

daymake 发表于 2009-6-12 17:29:57 | 显示全部楼层
不错 支持选峰工作室
回复

使用道具 举报

leyan17 发表于 2009-6-12 17:39:56 | 显示全部楼层
支持下
回复

使用道具 举报

chehaojia 发表于 2009-6-12 18:08:01 | 显示全部楼层
好东西 支持下
回复

使用道具 举报

习明 发表于 2009-6-12 18:15:17 | 显示全部楼层
首先是 discuz允许@和.作为用户名的组成部分 也就是说 可能出现邮箱字符串做用户名是有可能的 因此这样会造成潜在的混乱
其次是 discuz有一个函数 isemail 专门用来判定邮箱字符串
回复

使用道具 举报

 楼主| 选峰工作室 发表于 2009-6-12 18:24:41 | 显示全部楼层
本帖最后由 选峰工作室 于 2009-7-14 12:33 编辑

8# 习明

谢谢提醒。

改成
  1. if(isemail($username)) $username=$db->result_first("SELECT `username` FROM `{$tablepre}members` WHERE `email` LIKE '$username' limit 0,1");
复制代码
DZ允许邮箱作为用户名,也许应该在登陆时加个登陆方式的选择菜单。

比如可以选择用户名,UID,邮箱三种方式登陆。当为邮箱登陆方式时,使用此功能。

------------------------------------------------------------------------------
选峰工作室,专注于DISCUZ产品研究和插件开发。
QQ:445663314 网站:http://yxfstudio.cn

------------------edit by yxf's posts signature editor automatically---------
回复

使用道具 举报

dywe12 发表于 2009-6-12 18:52:35 | 显示全部楼层
支持支持!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-11-15 01:16 , Processed in 0.035478 second(s), 6 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

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