借助自身平台,我们用两个小时完成了新项目的用户系统

近年来敏捷开发这个词很火,从技术角度来讲,想要做到敏捷开发,必须要有足够的技术沉淀,最大化复用已有组件(如后端框架最佳实践模版脚手架、通用工具函数、通用前端组件等),否则敏捷开发根本很难快起来。

我们最近也在开发一个新项目,从项目设计、原型图设计到最终上线,周期只有一个星期。正巧我们是一家提供身份认证服务的云厂商,用户系统就是我们沉淀下来的一个可以复用的通用组件,用户增删改查、禁用账号、社会化登录、登录表单、用户登录态维护都是封装好的,且高度配置化。这个新项目的用户系统当然得用自己的啦!

最终我们一个工程师花了两个小时的时间,在项目中集成了 Authing ,项目也得以顺利按时上线。下面我们便来分享一下这个案例。

首先我们来看一下该项目用户系统的需求,在假设从零开始来做的话需要完成哪些工作:

  1. 由于我们日常一般使用企业微信办公,公司组织机构和员工目录都保存在企业微信,所以需要支持使用企业微信登录。

  2. 需要有一个支持企业微信登录的前端登录表单,尽可能美观。

  3. 要求能够按照企业微信部门来配置接口权限,比如某部分数据只有特定部门的成员能够查看,这就需要将企业微信的组织机构树同步到自己的数据库。

  4. 由于公司正在快速发展,所以经常会有新员工入职,所以最好能够做到自动同步企业微信的组织机构,不然每次手动添加账号挺还挺麻烦的。

  5. 需要能够审计用户的登录行为,知道谁在什么时候、什么地点登录了该应用。

一看下来是不是还挺麻烦的?单是支持个企业微信登录就得花不少时间了,7 天别说上线一个完整的应用了,能把上面几项做完都很难。下面我们来看看我们是如何在两个小时内完成上述所有需求的。

需求分解

支持企业微信登录

Authing 将近 20 种社会化登录方式,国内常见的如微信、GitHub、支付宝、企业微信全部支持,配置一下即可:

Authing 还提供了社会化登录的 SDK,你甚至不需要做弹出企业微信窗口、监听 window message 事件等操作,一行代码就够了:

// 使用企业微信登录
const authenticationClient = new AuthenticationClient({
   appId: "YOUR_APP_ID",
})
await authenticationClient.social.authorize("wechatwork:corp:qrconnect", {
   onSuccess: (user) => { console.log(user) },
   onError: (code, message) => {  },
})

前端登录表单

Authing 提供了一个可嵌入的前端登录组件,支持 React、Vue、Angular 三种前端框架以及原生 JS 调用,以 React 组件为例,接入也是几行代码。你可以在 Authing 控制台的应用列表页面获取到 AppID。

import React, { useState } from 'react'
import { AuthingGuard, LoginMethods } from '@authing/react-ui-components'
import '@authing/react-ui-components/lib/index.min.css'

export default function App() {
  const [user, setUser] = useState(null)
        return (
                <div className="App">
                        <AuthingGuard 
                                appId="APP_ID" 
                                onLogin={(user) => setUser(user)}
                  config={{
                            disableRegister: true,
                  }}
                        />
                </div>
        );
}

看下效果,界面还是很美观的,几分钟,一个登录表单就完成了。

导入企业微信组织机构

组织机构 Authing 也是支持的,目前 Authing 支持从企业微信、钉钉、Active Directory 等身份源导入组织机构,按照文档配置好,几分钟之后组织机构就同步过来了,同时之后企业微信那边部门和人员的变动也会同步到 Authing 的组织机构!

借助组织机构 SDK,也很容易完成根据用户所在部门判断权限的功能。

用户登录日志审计

这也是 Authing 内置的功能,能够看到谁在什么地方登录了应用:

后端用户鉴权

Authing 使用 JSON Web Token 表示用户身份凭证,你可以在后端使用 jwt.verify 验证 token ,并获取到用户资料,以 express 中间件为例:

import jwt from 'jsonwebtoken';

const auth = async (req, res) => {
    const token = req.headers['authorization']
        
    try {
        const user = jwt.verify(token, "YOUR_APP_SECRET");
        req.user = user
        next()
    } catch (error) {
        return res.json({ code: 403, message: "请先登录" })
    }
}

由于直接使用 jwt 密钥验证 token,不会有任何网络请求,速度非常快。

总结

这些流程下来,基本上每一个都是花几分钟就接入了,借助 Authing 强大的组件复用能力,我们得以在最短时间内完成了 MVP 产品的上线。作为一个开发者,敏捷绝不能仅是一个口号,也不能只有方法论,关键还是得有技术沉淀,有足够优质的轮子可以复用。