V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
risky
V2EX  ›  程序员

想到一个奇怪问题

  •  
  •   risky · 2020-11-30 01:09:47 +08:00 · 2709 次点击
    这是一个创建于 1215 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有的网站两个登录框,第一个可以填写账户名 /邮箱 /手机号,第二个填写密码

    那如果有一个账户的手机号跟另一个账户的名称一样,登录得怎么处理,注册的时候直接限制用户名长度么

    zhuzhibin
        1
    zhuzhibin  
       2020-11-30 01:12:26 +08:00 via iPhone
    很多种做法吧 通常用户名应该是数字字母符合什么的组合
    1if5ty3
        2
    1if5ty3  
       2020-11-30 01:22:29 +08:00 via iPhone
    限制用户名不能用纯数字呗
    thedrwu
        3
    thedrwu  
       2020-11-30 05:51:56 +08:00
    楼主这头像
    xuanbg
        4
    xuanbg  
       2020-11-30 07:45:35 +08:00
    注册的时候判断数据库里面有没有用户名 /手机号 /邮箱等等任何可以用来登录的字段是否存在。
    baobao1270
        5
    baobao1270  
       2020-11-30 08:48:00 +08:00   ❤️ 1
    这个问题是存在的……我百度的用户名就是一个已经销卡的手机号,每次登录百度都会被认为是手机号,提示手机号不存在。最后这能申诉+绑定邮箱,用邮箱登录。

    注册的时候可以不允许使用 11 位数字注册。
    @xuanbg #4 的方法,没有考虑到用户更换手机号的情况。
    zmQAQ
        6
    zmQAQ  
       2020-11-30 09:06:53 +08:00
    注册时候查询验证数据库是否有相同字段,登陆的时候直接查询你的账户就 OK 了
    risky
        7
    risky  
    OP
       2020-11-30 09:51:40 +08:00
    @zmQAQ 感觉必须要限制账户名不能跟手机号格式一样,不然就会出现 #5 的问题了
    cmdOptionKana
        8
    cmdOptionKana  
       2020-11-30 09:58:31 +08:00 via Android
    这个设计有根本性问题,其实如果允许邮箱和手机号在同一栏自由填写,就不应该允许账户名在同一栏自由填写。

    先让填邮箱或手机,自动生成一个随机用户名,后续允许用户改名就可以了,注册过程照样简洁,用户名也照样可以自定义。
    shaozelin030405
        9
    shaozelin030405  
       2020-11-30 09:59:53 +08:00
    禁止拿手机号做用户名,解决
    xuanbg
        10
    xuanbg  
       2020-11-30 10:01:01 +08:00
    @baobao1270 你悄悄更换手机号直接登录(登录注册合一的情况),而不是登录以前的号进行更换手机号操作。这个问题无解的呀。
    yaphets666
        11
    yaphets666  
       2020-11-30 10:02:21 +08:00
    我觉得不管是拿什么作为账户名 账户名在不同种类的间都应该是唯一的
    cmdOptionKana
        12
    cmdOptionKana  
       2020-11-30 10:03:33 +08:00 via Android
    注册时先给随机用户名,修改用户名时不允许是纯数字或有 @ ,后续登录的时候就不可能重复
    no1xsyzy
        13
    no1xsyzy  
       2020-11-30 10:08:37 +08:00
    @xuanbg 想象一下,假定存在一个手机号 X{11}
    首先,1. 有人注册了账号 Y ; 2. 有人注册了账号 X{11}; 3. Y 绑定了手机号 X{11}
    这个过程中,只有 3. 的位置能够判断,但你要不允许 Y 绑定?还是 Y 绑定完成后也不允许手机号?

    最核心的方案还是除了通用框以外,可以明确指定我输入的是(手机号 / 邮箱 / 账号)
    就算采用比较隐蔽的比如 tel::X{11} mail::[email protected] account::X{11} 的区分也行。
    lixiaolin
        14
    lixiaolin  
       2020-11-30 10:31:35 +08:00
    限制用户名不能跟手机号格式一样吧
    takemeaway
        15
    takemeaway  
       2020-11-30 10:48:02 +08:00
    @no1xsyzy 一般是手机号优先,如果同时存在手机号和用户名一样但是账号不同的情况,账号那个是登录不上的,需要用邮箱登录,然后绑定其他手机号。
    所以存在 5L 的情况。
    nnnToTnnn
        16
    nnnToTnnn  
       2020-11-30 11:32:30 +08:00
    @baobao1270
    @takemeaway

    注销的逻辑难道不应该是这样的吗?


    请输入你要注销的用户

    用户名: xxxxxx
    密码: xxxxxxx

    请输入手机验证码 or 邮箱验证码


    通过用户名 + 密码 可以拿到用户 id 在通过用户 id 来注销用户
    nnnToTnnn
        17
    nnnToTnnn  
       2020-11-30 11:34:36 +08:00
    @nnnToTnnn 为什么会存在 5L 的问题,我表示对百度的技术深深的怀疑
    risky
        18
    risky  
    OP
       2020-11-30 12:08:34 +08:00
    ggbdpq
        19
    ggbdpq  
       2020-11-30 12:09:26 +08:00
    "一个账户的手机号跟另一个账户的名称一样"你让别人登录注册的时候就不应该存在这个问题,用户名不都是唯一的。吗?
    ddosakura
        20
    ddosakura  
       2020-11-30 12:34:35 +08:00 via Android
    @nnnToTnnn 应该是历史遗留问题吧,一起不流行手机号的时代没考虑这个
    iptables
        21
    iptables  
       2020-11-30 12:35:38 +08:00
    禁止纯数字用户名(防止和手机号冲突),禁止含有 @ 的用户名(防止和邮箱地址冲突)
    iptables
        22
    iptables  
       2020-11-30 12:36:47 +08:00
    或者不让用户指定用户名,而是分配一个唯一的 ID
    xuanbg
        23
    xuanbg  
       2020-11-30 13:34:53 +08:00
    @no1xsyzy 注册 /绑定手机号这一步是有短信验证的,Y 常规手段绑定 X 是不会成功的。问题一般是先注册了 Y,但没有绑定手机号,然后用手机号验证码登录,就变成了两个账号。还有就是用手机号 X 作用户名注册了账号,并绑定了手机号 X,然后绑定的手机号换成了 Y 。这时候用户名还是 X,别人用手机号 X 登录就出问题了。

    还有就是我用一个手机号 X 注册了,然后这个手机号我注销掉了,被运营商回收后你购买了这个手机号 X 使用。当你去注册的时候就注册不上了,系统会提示你用户已存在。然后你使用找回密码功能登录了我的账号,并据为己有。
    nnnToTnnn
        24
    nnnToTnnn  
       2020-11-30 15:43:19 +08:00
    @ddosakura #20 所以我才怀疑百度的技术能力,一般历史问题,都会积极的响应或者重构代码,一般不重构代码,就这样用的情况下,只能说是公司技术不活跃,或者公司财务,或者员工出现了消极态度,这样用就可以了,甚至大部分核心员工离职了。等等情况下,才会出现#5L 这种小问题得不到任何解决。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1122 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 22:50 · PVG 06:50 · LAX 15:50 · JFK 18:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.