id name 密码
1 cola pwd111
2 cola pwd222
如果 cola 输入的密码匹配 pwd111,就把他当做 id=1 的用户处理;
如果 cola 输入的密码匹配 pwd222,就把他当做 id=2 的用户处理;
否则就告诉 cala:密码或用户名错误。
这样就实现了重名登录
模式了。
我倒是觉得【重名登录】的情况的确可行,现实生活中就是这样!重名的人多得去了。如果允许重名登录,那大家就可以不用担心自己的名字已经被注册啦……张三,直接输入自己的全名拼音zhangsan即可登录,简直不要太爽!如果非得搞个zhangsan222去注册,肯定比较失望……那是谁?把我优雅的名字zhangsan给抢掉啦?
如果name字段不允许重复,可以另外加个允许重复的 nickname 字段。允许用户使用 nickname 登录,这效果跟允许【重名登录】是一样的。如果发现登录时使用的是11位数字,基本判断在用手机号登录;如果发现是xxx@yy,基本判定用户在用邮箱登录;否则认为用户在使用 nickname 登录。
你注册cola的时候,首先在数据库查出username='cola'的集合。
然后遍历这个集合,逐个用Hash::check()校验一次你注册的密码是否跟集合内的密码一样...
cola用户修改密码的时候也要做一次这个校验...
凭什么我123456这个『优雅』的密码被抢掉啦?
我选择username唯一好了 :smile:
id、昵称、密码、隐秘字段
id 唯一
隐秘字段是由【昵称拼接密码后加密】生成的,也是唯一的(加密过程是在服务器端进行的)
所谓的重名登录,无非就是去数据库里查找一下这个【隐秘字段】是否存在,有且匹配则代表登录成功。
注册 cola 的时候,不用检索集合,而是检索隐秘字段是否存在,如果根本就不存在【cola拼接密码再加密一次】的值,代表可以注册。
有了这个唯一的【隐秘字段】,几乎可以不用给重名个数设置上限了
用户密码相同是再普遍不过的事了 如果我设了3次密码都不行 估计我就放弃注册了 说不定两次我就放弃
注册用户名不能相同,这已经是约定俗成的,很好理解,但是密码无效这回事估计会懵了吧
会存在这样的情景
用户A :账户:zhangsan 密码 aa
用户B: 账户:zhangsan 密码bb
万一哪天A用户想改密码,改成bb,怎么提示都不合适
重名登录的好处很明显:大家不用抢着去注册。我叫张三,只要我愿意,我始终都可以使用 zhangsan 去注册(不用搞成 zhangsan222)。据我所知,重名登录功能目前在网络里应该没有被实现过。但并不代表不可实现……
开发重名登录功能所需的成本是一方面,主要问题是重名登录的确有风险。10个叫张三的人重名登录或许不明显,但是如果有1000个都叫张三的人来登录,那密码重复的几率就会大幅提升……这便是一大风险。目前我想不到好方法,最多也就是设置一个重名上限,比如最多允许20个 人重名。如果有第21个叫张三的来注册,对不起,请更换用户名。
【解决重名登录的安全隐患问题,较笨拙的方法
】
假设有1000个人都叫张三,他们都使用zhangsan进行注册,这1000个人的密码有可能出现重复。
为解决1000个张三的密码冲突问题,可以对【重名者的密码】给出限定条件。除第一个注册的人以外,另外999个张三的密码必须包活注册时使用的11位手机号。或者干脆就默认密码为:11位数字的手机号(张三当然可以再任意添加若干位字符以加强密码的安全性)。
由于1000个张三的手机号是不相同的,因此重名者的密码必定不同,加密运算之后的结果也必定不同。
如果重名者不认可这个密码,觉得太麻烦,当然可以改名注册。
【重名登录的运行效率问题】
由于同名者的密码已经存在唯一性了(限定于1000个张三之间),直接查找这个唯一密码加密运算后的结果即可(这时候就不需要额外的“隐秘字段”了)
【手机号的隐私问题】
可以将手机号进行加密计算后保存在数据库里,暂定字段名称为隐秘手机号
【密码找回问题】
当用户采用手机找回密码时,要求提供手机号,将手机号加密计算并与数据库里的隐秘手机号比较,结果一致则发送验证码,否则提示用户手机号错误。
我一块钱注册一个域名,之后总会收到一些推销电话,有的还是域名注册公司打来的,这就证明手机号保护力度不够,对手机号加密也是有必要的。(这里扯远了)
对于恶意的冒名顶替问题,这个其实在微信诈骗里就已经存在了。头像换成你的,微信昵称改成你的,然后……这就需要微信好友加强防范了,涉及金额的问题一定要电话确认。当然还有其他识别的办法……
对于 @zhangsan 的处理,全部显示为 @zhangsan1001、 @zhangsan1002、 @zhangsan1003。
这里的1001、1002和1003不一定就是 zhangsan 的真实 id 编号。系统完全可以对真实 id 进行运算后显示在页面。
为美观、简单起见,也可以不用添加这个【伪 id】。此时 @zhangsan 命令无效(因为有重名),但是只要你点击zhangsan旁边的回复按钮,则始终能正确回复(因为系统是按唯一id在回复的)。
用户名重复再实际中效果是不好的,比如在一个社交网址上,明星胡歌的用户名是‘胡歌’,当允许重复时,即还有其他用户的用户名也是‘胡歌’,‘胡歌’这个用户名发出的消息,其他人将无法确定是哪个‘胡歌’,就会存在歧义。
@zhaiduting 可是你怎么知道是 @ 的哪个呢,比如我有个小伙伴的名字是 zhangsan,我是不是还要找到他隐藏的 zhangsan + unique_id (随便什么规则生成的唯一标识)?
推荐文章: