构建一个漂亮的跨平台登录 / 注册能有多难? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
logto
V2EX    程序员

构建一个漂亮的跨平台登录 / 注册能有多难?

  •  
  •   logto
    logto-io 2022-08-28 23:06:25 +08:00 3222 次点击
    这是一个创建于 1196 天前的主题,其中的信息可能已经有所发展或是发生改变。

    原文地址

    开场

    作为开发者,你一般如何在 app 中构建用户登录 / 注册?回到 20 年前,大部分答案应该是「从头开始」。这件事曾很简单:

    • 使用 FrontPage 2000 绘制用户名和密码输入控件与提交按钮。
    • 使用语言内置的 Session 将用户会话存储在内存中。
    • 关于安全? MD5 就是答案。

    上面的都没听过?那么很遗憾,你错过了软件开发的「好时光」。 如今,开发者在构建登录注册时会面临一系列挑战:

    挑战

    等一下,等一下。所有这些都只是关于用户登录 / 注册?没有它们,我甚至无法开始「真正的业务」? UI 逻辑看起来很复杂,我是不是还需要 PM 和设计师?答案是:对也不对。容我解释一番:

    • ,因为:
      • 你不仅要构建一个「登录 UI 」,还要构建一个统一的用户身份体系,并支持多种登录方式和身份来源。
      • 当你或你的公司成长到一定规模,或者想要一个优雅且安全的身份用户体验时,你会发现这些东西是必要且基本的。你会很庆幸(或者很后悔没有去)从第一天开始考虑这些事情。
    • 不对,因为在现实生活中这些是几个月的工作;且通常情况下,在项目开始并不需要上述所有功能或特性:例如只从 iOS 应用开始,并且将社交登录作为唯一的登录方式。但是将来在以下状态中进行重构将引发巨大的痛苦:
      • 应用积攒了大量用户数据。
      • 你在开发一个新应用并希望复用同一个用户身份体系。

    假设你正在构建一个 all-in-one 的工作台应用(例如 Notion ),嘿,以上任意一件事是否和业务相关呢?

    Life is short

    我喜欢编码,我能准确地感受到「在项目早期的就停滞不切」那种糟糕的心情。如果你是独立开发者,你还会发现登录和身份这件事在不断重复:几乎每个应用程序都需要它。

    我尝试过的

    • Keycloak 功能全面,但对我来说有点「老派」并远远不到开箱即用的程度。
    • Ory 看起来很酷。但是它没有可配置的跨平台 UI 。
    • Supertokens 是一颗冉冉升起的新星,但它必须注入到后端服务中。
    • Auth0 是该领域中一个成熟的大型 SaaS ,但我很难弄清楚如何将 UI 设置成我想要的样子,例如将社交登录作为主要登录方式。

    所以,现在是「让我们做点什么」的时间了。

    我构建的

    伴随着「我为什么要再次处理这个问题?」的项目,我开始和几个开发者朋友一起构建开源项目 Logto。现在我可以自豪地说,Logto 会处理好之前提到的大部分事情。:-)

    Logto

    帮助你在几分钟内建立登录、auth 和用户身份体系。它提供基于 OIDC 的身份服务,并支持用户名、手机号、邮件和社交登录。还有适用于网页和原生应用的一整套 UI 。

    Talk is cheap. 让我通过一个真实的例子来告诉你它是多么简单。

    注:篇幅所限,在此就不完全展开所有配置过程了。总结一句话:点点鼠标,几行代码。详细教程可以 阅读原文 或者在 项目文档 网站查看。

    在应用中集成 Logto

    通过 开始上手 教程启动 Logto 后,按照集成指南,只需要四个简单的步骤就能将 Logto SDK 与你的应用集成。Logto 还会生成可用的代码片段,可以直接复制和测试。没有什么困难和特别的。

    集成 Logto

    自定义登录体验

    下图是登录体验的配置界面:可以将品牌颜色和 Logo URL 换成你的;如果需要,还可以启用深色模式或添加标语;右侧还有实时预览可供查看。这一切都会在全平台生效,也就是说不管是桌面网页、移动网页还是原生应用,都可以拥有相同的登录 / 注册体验。

    登录配置

    总结

    至此,我们已经通过集成 Logto 消除了大多数令人头疼的问题:

    • 「用户界面」实现带有用户名和密码的网页登录 / 注册界面。
    • 「跨平台」跨桌面网页、移动网页和原生应用的统一登录体验。
    • 「身份服务」使用 Logto 服务作为身份的枢纽。
    • 「安全」 Logto 采取了许多开放标准,并有内部安全策略。

    Logto 还内置了对其他文章中未涵盖功能的支持:

    • 手机 / 邮件动态验证码登录
    • 社交登录(微信、支付宝、GitHub 等)
    • iOS / Android 应用集成
    • API 保护等

    并即将推出这些功能:

    • 忘记密码流程
    • Machine-to-machine 应用
    • 更多连接器和 SDK

    所以构建一个漂亮的跨平台登录 / 注册并没有你想象的那么难,对吧?

    最后,我们希望这篇文章能对你有所帮助。如果对 Logto 的感兴趣,请前往我们的 GitHub repo 继续旅程,并随时和我们交流~

    6 条回复    2022-08-31 18:43:03 +08:00
    placeholder
        1
    placeholder  
       2022-08-29 00:24:50 +08:00
    README 没中文,等一个开源贡献
    huyi23
        2
    huyi23  
       2022-08-29 00:44:25 +08:00
    然后项目垮了,用户无法登陆了(逃)
    Ayanokouji
        3
    Ayanokouji  
       2022-08-29 13:02:36 +08:00
    可以画一下架构图吗?使用的话更偏向将 logto 隐藏起来,当中间件使用,不直接暴露给前端
    demonzoo
        4
    demonzoo  
       2022-08-29 21:15:40 +08:00
    @placeholder 虽然 README 没中文,但是文档有中文
    czyt
        5
    czyt  
       2022-08-31 13:51:05 +08:00
    数据库能支持其他的么
    logto
        6
    logto  
    OP
       2022-08-31 18:43:03 +08:00
    @Ayanokouji #3 这样的需求推荐 Ory 下面的产品哈
    @czyt #5 暂时没有计划呢
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     885 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 19:59 PVG 03:59 LAX 11:59 JFK 14:59
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86