① 注册登录

还原现金贷原生 App(roovault) 注册登录的前后端交互。当前快照:登录统一经 blc-service user/ 模块,token 机制(非 TGT/ST)。分支见下方「分支清单」。

概述

内容
起点App 启动 / 进入登录页
终点拿到 token,路由到进件或首页
发起端原生(LoginPrimeActivity / LoginOtpActivity / LoginFaceDialog)
后端blc-service(user/apply/query/tudcAux/
票据token(登录成功返回,后续请求带 token header);当前快照无 TGT/ST

时序图

sequenceDiagram
    autonumber
    actor U as 用户
    participant APP as 原生 App(roovault)
    participant SYS as 系统(SMS Retriever)
    participant FACE as 人脸 SDK(Smile/Google)
    participant BLC as blc-service

    Note over U,BLC: ① 启动 + 自动登录(当前禁用)
    U->>APP: 打开 App
    APP->>APP: AutoLoginComponent(实现体已注释,跳过)
    APP->>U: 展示登录页

    Note over U,BLC: ② 登录入口(手机号)
    U->>APP: 输入手机号,获取验证码
    APP->>BLC: user/login(手机号 + 设备信息)
    BLC-->>APP: loginType / nextLoginType + captchaConfig

    alt loginType 非空(直接成功)
        APP->>APP: completeSuccessfulLogin
    else nextLoginType = OTP
        Note over U,BLC: ③ 验证码登录(SMS 默认 / 语音)
        APP->>BLC: user/sendCaptcha(SMS, businessType)
        BLC-->>APP: captchaConfig(waitSeconds/resendSeconds)
        SYS-->>APP: SMS 自动读取(SMSRetriever) 或用户手输
        opt 用户选语音 或 重发倒计时结束
            APP->>BLC: user/sendCaptcha(VOICE 或 重发 SMS)
        end
        APP->>BLC: user/verifyCaptcha(手机号 + 验证码)
        alt 成功
            BLC-->>APP: token + uid + stage
        else 失败
            BLC-->>APP: onLoginActionError(errCode/errMsg)
        end
    else nextLoginType = FACE
        Note over U,BLC: ③ 人脸登录
        APP->>U: LoginFaceDialog 引导
        APP->>FACE: 活体检测(Smile/Google, FaceConfigBean)
        FACE-->>APP: 人脸数据
        APP->>BLC: apply/faceDetection
        BLC-->>APP: 结果 + token
    end

    Note over U,BLC: ④ 登录成功后
    APP->>APP: 存 token/uid/stage(本地加密 ACache)
    APP->>BLC: query/v1/loanAPPConfig(查流程开关)
    opt 新用户注册(ifReg)
        APP->>BLC: user/v1/updateChannelInfo4nc(渠道上报)
    end
    APP->>BLC: user/v1/bindFirebaseToken4nc(推送 token)
    APP->>APP: 权限检查 → CreditRouteUtil.startIdentity()
    APP->>U: 进入进件 或 首页

分支清单(穷举登录全部分支)

出处 LoginPrimeActivity / LoginOtpActivity(除注明)。

#分支触发条件处理接口/出处状态
1自动登录启动 AUTO_LOGIN_ACTION实现体已注释,直接返回 success(禁用)AutoLoginComponent:23已展开(禁用)
2注册检查输入手机号查是否已注册tudcAux/user/exists已展开
3登录-直接成功user/login 返回 loginType 非空completeSuccessfulLoginLoginPrimeActivity:426已展开
4登录-OTPnextLoginType=OTP跳 LoginOtpActivity(initSendOtp 决定是否自动发码):429已展开
5登录-人脸nextLoginType=FACELoginFaceDialog → 人脸:443已展开
6OTP 通道-SMS默认sendOtp(SMS)LoginOtpActivity:247已展开
7OTP 通道-语音用户点 Get Code By VoicesendOtp(VOICE):122已展开
8OTP 重发倒计时结束(resendSeconds)ReacquireCodeTimeCount 重发:237/239已展开
9SMS 自动读取收到 SMSSMSRetriever 自动填充SMSRetrieverBroadcastReceiver已展开
10验证码失败verifyCaptcha 失败onLoginActionError(errCode/errMsg):384/544已展开
11人脸渠道FaceConfigBean liveDetectionSmile / Google 人脸(视频压缩配置):504/517已展开
12定位采集登录时获取 GPS(失败 onLocationError):386已展开(贯穿)
13设备信息上报登录请求体携带 IMEI/deviceId/mac/品牌/OS(风控)LoginRequestBuilder已展开(贯穿)
14社交登录Google/FB/Twitter字段在、无调用(未启用)LoginRequestBuilder:77已展开(未启用)
15登录后-流程开关登录成功query/v1/loanAPPConfigQueryH5SwitchModel已展开
16登录后-渠道上报ifReg=true(新户)updateChannelInfo4ncFreshChannelDataModel已展开
17登录后-推送绑定登录成功bindFirebaseToken4ncBoundFirebasicModel已展开
18登录后-路由权限齐全/缺失startIdentity() / ShowAllPermissionActivityCreditRouteUtil已展开

无 WhatsApp 登录通道:LoginConstant 仅定义 OTP_TYPE_SMS/OTP_TYPE_VOICE。12-前端现状提到的 WhatsApp 是 BVN 核验通道(authCodeFromWhatappsBvn,见 02-实名与进件),非登录 OTP。

接口落地

步骤接口(真实路径)发起(原生类)目标后端
注册检查tudcAux/user/existsIsRegisteredOtherPlatModelblc-service
登录入口user/loginLoginModel / LoginPresenterblc-service
发验证码user/sendCaptcha(SMS/语音)SendOtpModel / LoginOTPPresenterblc-service
验码登录user/verifyCaptchaLoginOtpActivityblc-service
人脸登录apply/faceDetectionLoginFaceDialogblc-service
登出user/logoutIOutLoginblc-service
流程开关query/v1/loanAPPConfigQueryH5SwitchModelblc-service
渠道上报(新户)user/v1/updateChannelInfo4ncFreshChannelDataModelblc-service
推送绑定user/v1/bindFirebaseToken4ncBoundFirebasicModelblc-service

要点与缺口

  • 后端归属(快照差异):登录全走 blc-service user/ + token;无独立 auth 服务、api/login/v1、TGT/ST(12 旧快照已不成立,tudcAux 暗示 BFF 内部接 TUDC)。
  • 登录方式:手机号 OTP(SMS/语音)+ 人脸登录(nextLoginType=FACE,Smile/Google);登录返回 loginType 非空可一步成功。
  • 社交登录、自动登录当前未启用(字段/组件在但注释/无调用)。
  • 设备信息 + 定位随登录上报(风控);设备行为采集是独立后台链路(见 02-实名与进件)。
  • 衔接:登录成功 → token 落本地 → 权限 → CreditRouteUtil.startIdentity() 进入 02-实名与进件