换了手机也不怕丢账号:vibe 项目的设备与会话管理实战
用户数不清自己的登录会话,产品就要帮他数清楚。本篇只讲登录之后的事:当前设备标记、可改名的设备列表、单台退出、一键退出其他设备、新设备提醒与可疑会话处置,以及一人团队的最小可行集。

一个人现在有多少台设备,就有多少个正在登录你产品的会话:主力手机、备用手机、家里电脑、公司电脑、平板,有时候还有借来查一次资料的朋友电脑。用户自己都数不清这些会话,产品如果也不帮他数清楚,账号被盗的第一反应就是慌:到底是哪台设备在登录,我该先踢掉哪一个。本篇只讲登录之后已经产生的会话与设备怎么管,不讲登录方式本身,也不讲空闲多久自动退出,那是登录与会话超时各自的范围。本篇的范围很窄,窄到只回答一个问题:用户打开设备页,能不能在一分钟内看懂、并且敢动手处理。
先给一个立场:设备页不是安全工程师的后台,而是普通用户的自查工具。后台可以列令牌编号、签发时间戳、加密算法,用户页不能。用户页要回答的只有四件事:现在这台是不是我正在用的这台,还有哪些设备登录着,每台设备上次是什么时候活动的,点一下能不能让它立刻失效。任何不能落到这四件事上的字段,都不要出现在用户页上,放在内部日志里就够了。字段越多,用户越不敢点,因为他分不清点错会不会把自己也踢出去。
设备页首先是给用户看的,不是给工程师看的
设备列表的第一行,永远应该是当前设备,而且要明明白白标出来就是这台。不要让用户在五台名字都叫Chrome的设备里猜哪一台是自己手里这台。当前设备要有正在使用这个标记,点进去能看到大致的登录时间与城市,不要精确到街道,城市级别就够了,精确位置既没必要,也会让用户觉得被监视。其他设备按最近活动时间倒序排列,最近活动的在最上面,半年没活动的沉到底部,但不要自动隐藏,沉底本身就是一种提醒。
设备名字要让用户自己改。系统自动生成的设备名,比如某某型号加浏览器版本,对用户来说几乎等于乱码。第一次在新设备登录成功后,给用户一个顺手改名的机会,改成家里电脑、公司笔记本、旧手机这种他自己懂的名字。改名这个小功能,比任何花哨的安全文案都管用,因为用户下次再看到家里电脑这个名字时,立刻就知道是不是自己的。没有改名功能的产品,设备页迟早会变成一串谁也认不出的型号清单。
(以下为虚构示例)虚构的笔记工具松果笔记曾经收到过一封很有代表性的工单:用户说设备页里有三台都叫Safari的设备,他不敢点退出,怕把正在用的这台也退掉,最后只能改密码了事。改密码当然能解决问题,但代价是所有设备全部掉线,包括他正在用的这台,体验非常差。如果当时设备页里有当前设备标记和用户自己改过的名字,这件事本来只需要点一下陌生设备旁边的退出,十秒钟就能解决。设备页的设计目标,就是把改密码这种重武器,降级成点一下退出这种轻操作。
一台设备、一个会话,还是一串令牌,先想清楚再写代码
很多团队在实现时把设备和会话混成一个概念,页面上写设备,代码里却是令牌,结果就是用户点了退出某台设备,刷新后发现它还在,因为那台设备上有两个会话,或者同一个会话换了网络地址后被当成了新设备。动手之前先定好口径:一台设备可以有多个会话吗,在你的产品里答案应该尽量是不要。一台设备对应一个可撤销的会话集合,用户点退出这台设备,就等于撤销这台设备上的全部登录状态,不要让用户再去猜还要不要点第二次。
撤销的语义也要写清楚,而且要写给用户看。点退出之后,那台设备上下次打开产品时应该看到需要重新登录,而不是悄悄又自动登录回去。悄悄自动登录回去是最糟糕的体验,用户会以为退出功能坏了,从此再也不信这个按钮。反过来,撤销不应该删除历史记录,设备页里应该保留一条已退出的记录,写明什么时候、在哪里退出的,至少保留一段时间,让用户事后能对账。撤销是断开登录,不是抹掉痕迹。
还有一个必须提前定的规则:当前设备能不能被自己踢掉。答案应该是不能,或者至少要二次确认并明确告诉用户,你正在退出当前设备,点下去你自己也要重新登录。听起来是废话,但很多产品的退出按钮不做这个区分,用户在手机上随手点错,立刻就被登出,还要重新走一遍登录流程。把当前设备做成不可点、或者点之前先问一句,省掉的工单比你想象的多。
换设备、借电脑、卖旧手机的三条路径
换新手机是最常见的路径,产品要做的不是在新手机上再问一遍所有问题,而是让用户在旧手机还在手里的时候就能平滑过渡。理想的流程是新设备登录后,旧设备收到一条提示,告诉用户有一台新设备登录了,如果是你本人就不用管,如果不是就点这里处理。提示里要给设备名和大致时间,不要只写有新设备登录了这种等于没说的话。旧设备上的会话可以保留一段时间,让用户自己决定什么时候清理,不要在新设备登录的瞬间就把旧设备踢掉,用户可能还想用旧手机导数据。
借电脑是最容易被忽视的路径。用户在朋友电脑或者公共电脑上登录一次,关掉浏览器就以为退出了,实际上会话可能还留着。产品可以在这种场景下主动帮忙:在登录页给一个这台不是我的设备,下次关闭浏览器就退出的选项,或者在检测到全新设备加全新网络时,默认把会话有效期缩短。更重要的是,借来的设备上不要默认记住我,记住我这个勾选在自有设备上是方便,在借来的设备上是隐患。默认值的选择,本身就是一种安全设计。
卖旧手机或者送修之前,用户最需要的是一键清理。设备页里应该有一个退出其他所有设备的按钮,点一下就能让除当前设备之外的全部会话失效,并且事后收到一封确认,告诉他已经退出了几台设备、分别是什么名字。没有这个按钮,用户只能一台一台点,点到第三台就放弃了,剩下的隐患就留在了旧手机里。一键清理不是高级功能,是设备页的底线功能,上线第一天就应该有。
新设备登录提醒怎么写,才不吓人也不漏报
新设备提醒的文案,目标是让本人安心、让非本人能行动,而不是把所有人都吓一跳。好的提醒包含四样东西:产品名、新设备的用户自定义名或者设备类型、大致地点与时间、不是本人时的处理入口。缺了任何一样,用户都只能猜。最常见的毛病是提醒里只有一句话,检测到新设备登录,请注意账号安全,用户看完既不知道是哪台设备,也不知道该点哪里,只能去改密码,把一件小事升级成一次全员掉线。
提醒的渠道也要分层。站内提醒是第一层,用户下次打开产品就能看到;邮件或者其他已有联系方式是第二层,适用于用户当前不在产品内的情况。不要在同一分钟内用三个渠道轰炸同一个人,那不是安全,是骚扰。更不要因为一次新设备登录就直接锁号,锁号应该是用户主动点的处理动作,或者是连续多次异常之后的升级动作,而不是第一次提醒的默认动作。锁号越轻易,误伤本人的概率就越高,客服工单也会跟着涨。
还有一个判断:新设备提醒要不要每次都发。答案是分情况。用户常用的设备组合稳定之后,重复提醒只会训练用户忽略提醒,真正异常的那一次反而会被淹没。合理的做法是只对全新设备组合发提醒,已经确认过的设备再次登录不再重复提醒,但要在设备页里留一条记录。提醒的价值在于稀缺,提醒发得越多,每一次提醒的可信度就越低。
可疑会话的处置流程,要让用户一步步走得下去
当用户真的发现一台不认识的设备时,他需要的不是一篇安全科普,而是一条能一步步走下去的处置路径。第一步是撤销那台设备的会话,点一下就生效,不要再让他先去改密码、再去验证邮箱、再回来点撤销,顺序反了。先止血,再补强,这个顺序不能错。第二步是退出其他所有设备,如果用户已经不确定还有没有别的异常,一键清理是最省心的选择。第三步才是改密码和检查关键设置,比如绑定邮箱、支付方式、导出权限有没有被改过。
(以下为虚构示例)虚构的在线文档工具白塔文档的处置页就是按这个顺序排的:页面顶部就是一台陌生设备的卡片,卡片上只有一个大按钮退出这台设备,点完之后页面才出现第二步,是否同时退出其他所有设备,点完之后才提示建议改密码并检查最近的操作记录。用户按这个顺序走下来,全程不到一分钟。反过来排的页面我见过不少:先让用户改密码,改完密码还要重新登录才能回来点退出,很多人走到第二步就放弃了,陌生会话还挂在那里。
处置完成之后,一定要给用户一个结果确认。告诉他已经退出了哪几台设备、分别是什么名字、什么时候退出的,并且在设备页里留一条可查看的记录。没有结果确认,用户会反复回来检查,甚至重复操作好几次,反而制造新的混乱。结果确认也不需要写成长文,三行就够了:退出了什么、什么时候退出的、接下来还建议做什么。把不确定的状态变成确定的结果,本身就是在安抚用户。
共享账号与团队场景的边界,要提前说清楚
设备管理在个人产品和团队产品里的含义并不一样。个人产品里,设备页管的是同一个人名下的多台设备;团队产品里,还要区分这是我个人的会话,还是我以团队成员身份在某台设备上的会话。混在一起的后果是用户在团队设备上点了退出个人账号,结果团队的共享会话也被影响,或者反过来,离职成员的会话没有及时清理,团队还以为他已经退出了。团队场景下,设备页至少要标清楚每条会话属于哪个团队空间,不要只列设备名。
共享一台设备的情况也要单独处理。很多小团队或者家庭用户会共用一台电脑,产品不应该假设一台设备只等于一个人。在这种场景下,切换账号要比退出账号更常用,切换时要清掉上一个账号的本地缓存,不要让下一个人打开产品就直接看到上一个人的内容。设备页里看到同一台设备名出现两次、分别属于两个账号,是正常的,不要把它当成异常来报警,报警多了,用户就会学会忽略所有提醒。
我的判断是:一人团队不要一开始就做复杂的角色与权限体系,但设备与会话的归属必须在一开始就写对。归属写错了,以后补权限体系时要返工的数据比想象中多;归属写对了,权限体系以后可以慢慢加。先保证每一条会话都能回答三个问题:属于谁、属于哪个空间、在哪台设备上,这三个问题答不上来,任何上层功能都是沙上建塔。
一人团队的最小可行集与上线检查清单
最小可行集其实只有五样:当前设备标记、可改名的设备列表、单台设备退出、一键退出其他所有设备、新设备提醒加处置入口。没有这五样,设备页就不算可用;有了这五样,就可以先上线,再慢慢补操作记录、登录历史导出、受信任设备这类进阶能力。进阶能力里最容易被高估的是受信任设备,记住这台设备三十天不用再验证,听起来很方便,但在设备管理还没跑顺之前上这个功能,只会让用户更难分清哪台设备是真的被信任过的。
登录历史和设备列表是两回事,不要把它们做成同一张表。设备列表回答的是现在谁还登录着,登录历史回答的是过去发生过什么:哪台设备在什么时候登录过、什么时候退出过、有没有登录失败的尝试。历史记录要给用户看,但要做脱敏处理,只显示设备名、大致城市与时间,不要把完整网络地址原样贴出来,普通用户看不懂完整地址,反而会觉得自己的隐私被摊开。历史保留一段时间就够了,太久的历史既占存储,也会让用户在翻旧账时越翻越慌,重点是最近一个月的关键动作都能对得上。
上线前按这张清单逐项打勾:设备列表里当前设备是否一眼可辨,设备名用户能不能自己改,点退出一台设备后它会不会悄悄自动登录回来,当前设备会不会被随手误踢,一键清理之后有没有结果确认,新设备提醒里有没有设备名、时间与处理入口,陌生会话的处置顺序是不是先撤销再改密码,借来的设备上记住我是不是默认关闭,登录历史是否与设备列表分开、是否做了脱敏。任何一项答不上来,就不要急着上线那一部分,先上线答得上来的部分。设备页的可信度是按最弱的一环算的,一处含糊,整页都会被用户当成摆设。
最后说一句可以贴在墙上的标准:用户在设备页上花的每一分钟,都应该换来更确定的安全感,而不是更多的疑问。如果用户看完设备页还是不知道该点哪个,或者点了之后还是不知道生效了没有,那这个页面就是失败的,不管后台的令牌设计多么漂亮。安全功能做到最后,拼的不是加密强度,而是普通用户敢不敢用、用完放不放心。把这一点做到位,一人团队的设备页就已经超过了市面上大多数产品。
评论 (0)
相关文章

社交登录把注册摩擦降到一次点击,但真正的成本藏在账号合并、state 与 PKCE、Token 存储里。本指南讲清 OIDC 与 OAuth 的分工、提供方选择、合并规则与上线前测试清单。

OpenAI 赏金区间中位数平均翻四倍以上:核心产品危急漏洞最高 30,000 美元,叠满奖励的特殊漏洞约 172,000 美元。本文拆解乘数怎么叠、Cathedral 冲刺意味着什么,以及为什么 172,000 美元不该是你的目标。

事务通知邮件发不发得出去不是问题,问题是每一封该不该发。本篇只讲产品层:四类触发、事件加幂等键、一封只讲一件事、频率上限与合并、按类别退订,以及一人团队的上线检查清单。