Closed ashinnotfound closed 10 months ago
陈汛 广东工业大学
陈汛
广东工业大学
实现了用户使用第三方账号登录和绑定第三方账号的功能(目前github测试通过), 以及提供了支持其他第三方账号的能力
// application.yml third-party: githubClientId: githubClientSecret:
为新增配置项,通过创建github应用获取
使用第三方账号登录
逻辑:根据request的第三方账号类型通过反射调用对应方法获取第三方账号id,查表判断是否存在有对应id的记录,有则查询具体用户信息、填充权限、生成token;无则登陆失败(说明该第三方账号未绑定任何账号)
绑定第三方账号
逻辑:根据request的第三方账号类型通过反射调用对应方法获取第三方账号id,查表判断是否存在有对应id的记录,有则说明该第三方账号已被绑定过,终止业务,返回错误response;无则进行表的更新
com.webank.ddcms.enums.CodeEnum 新增REPEAT_OPERATION(402, "重复操作")状态码
com.webank.ddcms.enums.CodeEnum
REPEAT_OPERATION(402, "重复操作")
当用户重复进行某项一次性业务时报错,如重复绑定第三方账号
新增com.webank.ddcms.enums.ThirdPartyType枚举类,用于判断第三方账号类型
com.webank.ddcms.enums.ThirdPartyType
com/webank/ddcms/vo/response/LoginResponse新增userName属性,用于填充使用第三方账号登录时前端缺失的用户名
com/webank/ddcms/vo/response/LoginResponse
com/webank/ddcms/advice/ExceptionHandlerAdvice新增IllegalArgumentException的异常处理,对业务中的断言进行统一处理
com/webank/ddcms/advice/ExceptionHandlerAdvice
IllegalArgumentException
com/webank/ddcms/config/AuthConfig修改属性String anonymousApi为List<String> anonymousApiList,以anonymous支持新增的/api/account/loginWithThirdParty接口
com/webank/ddcms/config/AuthConfig
String anonymousApi
List<String> anonymousApiList
/api/account/loginWithThirdParty
新增com/webank/ddcms/dao/entity/ThirdPartyInfoEntity及com/webank/ddcms/dao/mapper/ThirdPartyInfoMapper以支持新增的第三方账号表
com/webank/ddcms/dao/entity/ThirdPartyInfoEntity
com/webank/ddcms/dao/mapper/ThirdPartyInfoMapper
CREATE TABLE `t_third_party_info`( `did` varchar(255) NOT NULL PRIMARY KEY, `github_id` bigint unsigned NULL COMMENT 'github账号id' )ENGINE=InnoDB DEFAULT CHARSET=utf8;
新增第三方账号工具类com/webank/ddcms/utils/ThirdPartyUtils,目前有通过用户临时code获取github账户信息的功能实现方法
com/webank/ddcms/utils/ThirdPartyUtils
鉴于大多数第三方应用授权都是采用携带回调code的方式, 因此后端代码的实现使用了反射的方法, 理论上适配所有此类型的第三方账号接入登录。以微信为例, 只需要新增枚举类com.webank.ddcms.enums.ThirdPartyType属性、添加相应的表字段、增加对应clientId和ClientSecret的配置以及在com/webank/ddcms/utils/ThirdPartyUtils中编写针对性的获取微信账户信息方法即可
Task5 实现DDCMS的第三方登录功能(后端)
概述
实现了用户使用第三方账号登录和绑定第三方账号的功能(目前github测试通过), 以及提供了支持其他第三方账号的能力
配置说明
为新增配置项,通过创建github应用获取
主要实现功能
使用第三方账号登录
逻辑:根据request的第三方账号类型通过反射调用对应方法获取第三方账号id,查表判断是否存在有对应id的记录,有则查询具体用户信息、填充权限、生成token;无则登陆失败(说明该第三方账号未绑定任何账号)
绑定第三方账号
逻辑:根据request的第三方账号类型通过反射调用对应方法获取第三方账号id,查表判断是否存在有对应id的记录,有则说明该第三方账号已被绑定过,终止业务,返回错误response;无则进行表的更新
重要代码改动
com.webank.ddcms.enums.CodeEnum
新增REPEAT_OPERATION(402, "重复操作")
状态码新增
com.webank.ddcms.enums.ThirdPartyType
枚举类,用于判断第三方账号类型com/webank/ddcms/vo/response/LoginResponse
新增userName属性,用于填充使用第三方账号登录时前端缺失的用户名com/webank/ddcms/advice/ExceptionHandlerAdvice
新增IllegalArgumentException
的异常处理,对业务中的断言进行统一处理com/webank/ddcms/config/AuthConfig
修改属性String anonymousApi
为List<String> anonymousApiList
,以anonymous支持新增的/api/account/loginWithThirdParty
接口新增
com/webank/ddcms/dao/entity/ThirdPartyInfoEntity
及com/webank/ddcms/dao/mapper/ThirdPartyInfoMapper
以支持新增的第三方账号表新增第三方账号工具类
com/webank/ddcms/utils/ThirdPartyUtils
,目前有通过用户临时code获取github账户信息的功能实现方法其他
鉴于大多数第三方应用授权都是采用携带回调code的方式, 因此后端代码的实现使用了反射的方法, 理论上适配所有此类型的第三方账号接入登录。以微信为例, 只需要新增枚举类
com.webank.ddcms.enums.ThirdPartyType
属性、添加相应的表字段、增加对应clientId和ClientSecret的配置以及在com/webank/ddcms/utils/ThirdPartyUtils
中编写针对性的获取微信账户信息方法即可