使用第三方登录:

常用的就是微信登录,apple登录,现在比较流行的手机号码一键登录。这里需要根据手机系统的不同,iOS13才有的apple登录,手机是否安装微信等等一系列情况。以微信和apple这两种举例

if(version >= iOS13)
{
    If (wechat)
    {
        wechat && apple
    }
    else
    {
        apple
    }
}
Else 
{
     If (wechat)
    {
        Wechat
    }
    else
    {
        什么都没有
    }
}

这里需要注意的就是apple登录,苹果那边对这个卡的比较严,苹果登录之后不能强制绑定手机号码,这点要注意。
这次就说这种情况,苹果不允许的情况,以手机号作为当前用户的必要属性:

用户选择微信登录,通过微信sdk获取到unionid,后端去验证当前的unionid是否已经绑定了用户,如果绑定了,返回一个用户身份令牌(token,与用户的手机号有关联)用户登录成功。要是没有绑定,需要用户绑定手机号,并把当前的unionid和用户绑定,同时返回用户一个身份令牌,完成登录。

用户选择苹果登录,流程类似,不过绑定关联的是ASAuthorizationAppleIDCredential的user属性。

在这里我想说的是三方登录的设计理念,使用手机号作为用户的必要属性,后续的接口设计和业务设计都是以手机号为必要属性设计,这样的处理对于前后端的功能和流程设计显得尤为重要。比如用户更换手机号绑定这种情况,如果身份令牌和手机号相关联,那么用户绑定手机号之后,用户的身份令牌必然发生变化,此时就需要用户重新登录,可以在前端进行重新登录,也可以由后端执行更新令牌之后通知前端进行令牌更新。这样的设计理念比较简单,各端比较统一,各个功能的设计也有依据。

再有就是其他的比较复杂的设计,用户选择一种登录方式,在某些特定功能使用之前,用户并不需要其他的方式绑定账号。这样的设计思路很多,实现起来也比较复杂,结合实际的业务和功能需要再进行设计,作为一个前端对于token的理解有点局限,从服务端做配置方案更高级。