术语表
| 中文 | 英文 | 描述 |
|---|---|---|
| 用户中心2.0 | Shinda-Maru | 用户中心2.0版本描述 |
| 新版用户中心 | Cancel | 新版用户中心描述 |
| 登录安全配置功能 | - | 包括图形验证码临界次数配置、用户账户次数临界、用户账户冻结时间临界 |
| 图形验证码临界次数配置功能 | - | 密码输入错误x次后,需要弹出图形验证码(x次可配置) |
| 用户账户次数临界功能 | - | 用户输入密码/验证码错误 x次后,需冻结当前用户(x可配置) |
| 用户账户冻结时间临界功能 | - | 用户账户次数临界触发后,冻结用户x分钟(x可配置) |
| 登录日志明细功能 | - | 系统对用户登录、注册等行为进行日志留存 |
| 三方登录 | third-part | 特指我们作为Oauth客户端,对接微信、微博等三方平台 |
用例图
业务架构图
技术架构图
部署架构图

用户中心各模块职责说明
写在前面
依赖关系
版本演进说明
每个发布使用3个整数,MAJOR.MINOR.PATCH(主版本、次要版本、补丁版本)。这样做的目的是主版本是不兼容的,API大范围的升级。次要版本应该保留大部分源代码和二进制兼容旧版本的次要版本,认为可能有一些设计变更和不兼容的更新。补丁版本应该向前向后完美兼容。包含一些bug和缺陷修复这些意外的改变。
本文对应代码版本号:
<version>1.1.0.BUILD-SNAPSHOT</version>
模块说明
一、draco-common
1、设计意图:
存放一些通用常规的工具类 & 常量
二、draco-api
1、设计意图
用来存放 Facade 服务接口、出入参、错误码、i18n 文件
2、重点说明
本模块所有 Facade 接口,遵循永健的单参模型设计,所有次要 & 补丁版本改动,承诺向前兼容。
三、draco-server
1、设计意图
实现 draco-api 相关服务,比如登录、注册、密码修改、用户信息管理、三方用户信息管理、登录日志记录等
2、重点说明
- 本模块所有的外部服务依赖,应该放在 adapter 包管理并构建合理抽象的接口,而不是直接代码织入。
- 本模块的测试用例入口为 io.terminus.draco.ServerSuitTest.java ,每次改动,都承诺完整跑通所有场景用例
四、draco-api-autoconfigure
1、设计意图
本模块为 spring-boot 自动配置工程,提供 Facade 接口的 dubbo 消费逻辑,方便项目层的使用
2、重点说明
- 本模块未依赖 draco-server,而是直接依赖了 draco-api 模块
- 本模块使用了 spring boot 的自动配置特性
五、draco-web-autoconfigure
1、设计意图
本模块作为 web 应用的 sdk 用来实现 登录 token 的认证。会被各个使用用户中心的应用所依赖使用。当前版本强依赖了用户中心服务端提供的 dubbo 服务
2、重点说明
本模块也使用了 spring-boot 的自动配置特性
六、draco-web-common
1、设计意图
本模块来实现管理端 & web端通用的 web 应用服务,包括用户登录、当前用户查询、图片验证码服务、邮箱服务、手机号服务、密码服务等
2、重点说明
- 除功能性任务,本模块还需实现一些基础设置,比如 filter 异常拦截、统一的返回结构、统一的异常处理。本模块承诺异常拦截、统一的返回结构、异常处理等额外功能(包括未来类似的功能设计),默认不生效,通过开关配置才会生效
七、draco-admin
1、设计意图
本模块实现管理端相关能力,比如用户的冻结、解冻、分页查询、oauth-client 的增删改查等
2、重点说明
- 本模块的功能改动,都承诺走 io.terminus.draco.admin.controller.AdminClientControllerTest.java 回归过后才会提交
八、draco-web
1、设计意图
2、重点说明
- 本模块所有改动,承诺走 y-api 实现基线用例回归 & io.terminus.draco.web.WebSuitTest.java 回归后方可发布
- 本模块不依赖 draco-admin ,直接依赖 draco-web-common
九、draco-oauth-server
1、设计意图
本模块提供 oauth-server 端认证能力,同时也集成了 draco-web 的所有 api
2、重点说明
- 本模块所有改动,承诺走 y-api 实现基线用例回归 & io.terminus.draco.oauth.OauthServerSuitTest.java 回归后方可发布
用户中心SDK 接入指南(1.1.0.BUILD-SNAPSHOT)
spring boot接入
1、POM 引入 web sdk
<dependency><artifactId>draco-web-autoconfigure</artifactId><groupId>io.terminus.draco</groupId><version>1.1.0.BUILD-SNAPSHOT</version></dependency>
2、配置yml文件token解析配置
draco:web:login-config:# 这里需要和 uc web 端配置一样token-key: ${LOGIN_SHARE_COOKIE_NAME:u_c_local}token-type: JWTpc-expire-time: ${LOGIN_SESSION_EXPIRE_TIME:3600}app-expire-time: ${LOGIN_APP_SESSION_EXPIRE_TIME:2592000}token-storage-type: Cookiecookie-domain: ${COOKIE_DOMAIN:terminus.io}
3、开启mock(根据实际情况决定是否开启)
draco:mock:enable: true
4、获取当前用户
UserContext.getUserId();UserContext.getUserInfo();
5、哪些path可以获取用户信息?
默认我们的上下文注入filter拦截路径为/*,也就是登录状态下所有的path后端path都能获取到用户信息
uc提供的注入filter只做注入当前登录用户到上下文的操作并不会做登录检查,对于哪些路径需要拦截请接入方自己实现一个filter来做登录check和报错
6、dubbo 依赖服务
@Autowiredprivate UcUserReadFacade userReadFacade;@Autowiredprivate UcUserWriteFacade userWriteFacade;
扩展点说明
token 存储介质扩展点:
设计目的:
有些项目或者场景不方便使用 cookie 方式实现token 的传递 或者相较默认实现需要额外多做一些事情,这里需要预埋抽象扩展点,方便项目层自行实现扩展实现的切换。
核心拓展点:
/*** token 存储策略类* 功能定位:* token 生成后,需要将 token 写入到相应的请求对象中* 这里对 token 写入机制做一个简单抽象,实现相关功能** @author wang.xi*/public interface TokenStorageProcessor {/*** token 存储策略函数** @param context token 存储上下文信息*/void tokenStorage(TokenStorageContext context);/*** token 清除策略函数** @param context token 清除上下文*/void tokenRemove(TokenRemoveContext context);}
默认实现:
默认通过 cookie 机制实现 token 的传递,在 tokenStorage 函数中实现 cookie 的写入
扩展实现生效方式:
通过 @Bean 注解 & @Conditional 系列注解,实现实现类的替换,示例如下:
@Configurationpublic class DracoWebCommonConfiguration {...@Bean@ConditionalOnProperty(prefix = "draco.web.login-config", name = "token-storage-type",havingValue = "Cookie", matchIfMissing = true)public TokenStorageProcessor tokenStorageProcessor(LoginConfigProperties loginConfigProperties) {return new TokenCookieStorageProcessor(loginConfigProperties);}...}
触发时机:
用户登录/注册完成后,针对前端返回数据之前,以手机号密码登录为例:
// ......public abstract class BaseLoginController {...@Autowiredprivate TokenStorageProcessor tokenStorageProcessor;...@ApiOperation("手机号 + 密码登录接口")@PostMapping(value = "mobile")public TokenInfo loginByMobileAndPassword(@RequestBody LoginByMobileAndPasswordRequest request,HttpServletRequest servletRequest,HttpServletResponse servletResponse) {request.setTenantId(TenantContext.getTenantId());loginConfiguration.initExpireTime(request);Response<TokenInfo> response = loginFacade.loginByMobileAndPassword(request);if (!response.isSuccess()) {log.info("call mobile password login service error, params:{}, cause:{}",request, response.getError());throw new UcRestException(response.getError());}// 登录成功后需要将 token 存储下来TokenStorageContext context = new TokenStorageContext(response.getResult(),servletRequest, servletResponse);tokenStorageProcessor.tokenStorage(context);return response.getResult();}...}
登录/注册/用户 控制器扩展实现扩展点
设计目的:
有些项目需要对用户登录/注册/获取登录用户信息等http 服务做额外的扩展,比如基本的获取当前用户信息接口不一定满足项目测的需要(项目一般会多一些字段),这里需要允许项目测对这些控制器做扩展。
核心扩展点:
通过将这几个控制器设置为 抽象类的方式,保证默认不生效
...public abstract class BaseUserCommonController {...}...public abstract class BaseLoginController {...}...public class BaseSignUpController {...}
扩展生效方式:
通过 @Bean 注解 & @Conditional 系列注解,实现实现类的替换,示例如下:
public class DracoWebConfiguration {...@Bean@ConditionalOnProperty(prefix = "draco.web", name = "enable-sign-up-api", havingValue = "true", matchIfMissing = true)public BaseSignUpController baseSignUpController(SignUpFacade signUpFacade,UcUserReadFacade ucUserReadFacade,LoginConfiguration loginConfiguration,TokenStorageProcessor tokenStorageProcessor) {return new BaseSignUpController(signUpFacade,ucUserReadFacade,loginConfiguration,tokenStorageProcessor) {};}...}
Http服务返回值固定返回结构扩展点
设计目的:
因为不同的项目有不同的http返回数据结构的要求,因此各个Controller 层的方法,返回值不显式使用 Response 对象进行包裹,而是利用 Spring 的 Advice 机制实现固定的 http 服务返回值结构
核心扩展点:
@Order(Ordered.HIGHEST_PRECEDENCE)@ControllerAdvice("io.terminus")public abstract class BaseResponseAdvice extends AbstractMappingJacksonResponseBodyAdvice {@Overrideprotected void beforeBodyWriteInternal(MappingJacksonValue bodyContainer,MediaType contentType, MethodParameter returnType,ServerHttpRequest request, ServerHttpResponse response) {Object returnValue = bodyContainer.getValue();if (returnValue == null) {returnValue = this.getDefaultValue(returnType);}if (returnType.getMethod().getReturnType() != ResponseEntity.class) {if (returnType.getMethod().getReturnType() != Response.class) {Map<String, Object> result = new HashMap<>(8);result.put("success", true);result.put("result", returnValue);bodyContainer.setValue(result);}}}private Object getDefaultValue(MethodParameter returnType) {return Collection.class.isAssignableFrom(returnType.getMethod().getReturnType()) ? Collections.EMPTY_LIST : null;}}
扩展生效方式:
通过 @Bean 注解 & @Conditional 系列注解,实现实现类的替换,示例如下:
@Configurationpublic class DracoWebCommonConfiguration {...@Bean@ConditionalOnProperty(prefix = "draco.web", name = "enable-response-wrapper", havingValue = "true")public BaseResponseAdvice responseAdvice() {return new BaseResponseAdvice() {};}...}
Http 服务异常固定返回结构扩展点
设计目的:
因为不同的项目针对异常有不同的http返回数据结构的要求,因此各个Controller 层的方法的异常,不显式使用 try/cache 进行处理,而是利用 Spring 的 Advice 机制实现固定的 http 服务异常返回值结构
核心扩展点:
@ControllerAdvicepublic abstract class BaseRestExceptionAdvice extends ResponseEntityExceptionHandler {private final MessageSource messageSource;private static final Locale DEFAULT_LOCALE = LocaleContextHolder.getLocale();@Autowiredpublic BaseRestExceptionAdvice(MessageSource messageSource) {this.messageSource = messageSource;}@ExceptionHandler({UcRestException.class})protected ResponseEntity<Object> onRestException(UcRestException ex, HttpServletRequest request) {log.info("Rest异常 : ", ex);String error = this.messageSource.getMessage(ex.getMessage(), ex.getParams(), ex.getMessage(), DEFAULT_LOCALE);return new ResponseEntity<>(ImmutableMap.of("success", false, "error", error), HttpStatus.OK);}@ExceptionHandler({Exception.class})protected ResponseEntity<Object> onException(Exception ignore, HttpServletRequest request) {log.error("未捕获的异常 : ", ignore);String error = this.messageSource.getMessage("server.error", null,"server.error", DEFAULT_LOCALE);return new ResponseEntity<>(ImmutableMap.of("success", false, "error", error), HttpStatus.OK);}}
扩展生效方式:
@Configurationpublic class DracoWebCommonConfiguration {...@Bean@ConditionalOnProperty(prefix = "draco.web", name = "enable-exception-wrapper", havingValue = "true")public BaseRestExceptionAdvice restExceptionAdvice(MessageSource messageSource) {return new BaseRestExceptionAdvice(messageSource) {};}...}
图片验证码生成器扩展点
设计目的:
有些项目可能需要对图片验证码的生成逻辑做扩展,这里需要对生成器的实现逻辑预埋扩展点,方便上次应用扩展
核心扩展点:
通过设计核心接口,实现扩展点的预埋
扩展生效方式:
通过 @Bean 注解 & @Conditional 系列注解,实现实现类的替换,示例如下:
@Configurationpublic class DracoServerConfiguration {...@Bean@ConditionalOnMissingBean(CaptchaGenerator.class)public CaptchaGenerator captchaGenerator() {return new DefaultCaptchaGenerator();}...}
登录前置/后置扩展点
设计目的:
有些项目可能需要在登录前后做一些额外逻辑,比如密码连续输错3次启用图片验证码,输错5次锁定用户,这里需要对登录前后预埋一些扩展点,保证项目测的二次扩展
核心扩展点:
/*** 登录前置处理器** @author wang.xi* @version 1.0* @date 2019/7/8 1:25 PM*/@EqualsAndHashCodepublic abstract class AbstractLoginBeforeHandler implements Comparable<AbstractLoginBeforeHandler> {public static final int DEFAULT_ORDER = 100;private static Set<AbstractLoginBeforeHandler> handlerSet = new TreeSet<>();public static void handle(AbstractLoginRequest request, UcUser user) {for (AbstractLoginBeforeHandler loginBeforeHandler : handlerSet) {if (loginBeforeHandler.isSupport(request)) {loginBeforeHandler.beforeLogin(request, user);}}}/*** 登录前置处理方法** @param request 登录请求* @param user 当前用户实体*/protected abstract void beforeLogin(AbstractLoginRequest request, UcUser user);/*** 登录前置处理校验方法* 仅当返回 true 时才会执行扩展方法** @param request 登录请求* @return 支持性校验结果*/protected abstract Boolean isSupport(AbstractLoginRequest request);/*** 前置处理器的执行顺序 值越小 优先级越高** @return 优先级*/protected int getOrder() {Order order = this.getClass().getAnnotation(Order.class);if (order != null) {return order.value();}return DEFAULT_ORDER;}@PostConstructprotected void init() {handlerSet.add(this);}@Overridepublic int compareTo(AbstractLoginBeforeHandler handler) {return Integer.compare(this.getOrder(), handler.getOrder());}}// 后置扩展点生效方式类同上述,故忽略
扩展生效方式:
通过 @Bean 注解 & @Conditional 系列注解,实现扩展实现类的注册,示例如下:
@Configurationpublic class DracoServerConfiguration {...@Bean@ConditionalOnProperty(prefix = "draco.server.login-security",name = "enable", havingValue = "true", matchIfMissing = true)public AfterLoginSecurityCheckHandler afterLoginSecurityCheckHandler(LoginLimitCache loginLimitCache) {return new AfterLoginSecurityCheckHandler(loginLimitCache);}...}
触发时机:
用户登录完成前后,针对facade返回数据之前,以手机号密码登录为例:
public TokenInfo loginByMobileAndPassword(LoginByMobileAndPasswordRequest request) {// 根据手机号参数查询用户信息UcUser criteria = new UcUser();criteria.setTenantId(request.getTenantId());criteria.setMobile(request.getMobile());UcUser user = ucUserManage.findUserByMobile(criteria);if (user == null) {throw new ServiceException(UcLoginErrorCodeMap.USER_NOT_EXIST);}AbstractLoginBeforeHandler.handle(request, user);// 校验密码是否匹配checkPasswordMatch(user, request);// 生成 token 信息TokenInfo tokenInfo = tokenManage.generateTokenInfo(request, user);AbstractLoginAfterHandler.handle(request, user, tokenInfo);return tokenInfo;}
密码加密/匹配算法扩展点:
设计目的:
因为某些项目针对密码的加密解密算法逻辑可能有不同的改造需求(比如某项目就因为考虑历史系统密码兼容问题,有对一个密码需要分别使用两种以上加密算法尝试解密的需求),因此这里对加密/解密需要设置扩展点,方便项目测动态切换扩展实现。
核心扩展点:
public interface PasswordMatcher {/*** 加密** @param password 明文* @return 加密值*/String encode(String password);/*** 密码匹配器** @param password 明文* @param encodedPassword 加密值* @return 是否匹配*/Boolean matches(String password, String encodedPassword);}
扩展生效方式:
通过 @Bean 注解 & @Conditional 系列注解,实现扩展实现类的注册,示例如下:
@Configurationpublic class DracoServerConfiguration {...@Bean@ConditionalOnMissingBean(PasswordMatcher.class)public PasswordMatcher passwordMatcher() {return new DefaultPasswordMatcher();}...}
登录密码验证扩展点
设计目的:
因为密码的加密/解密能拿到的用户信息仅有密码,在做一些额外的判断,比如登录密码错误的次数累加就无法支持,因此需要对富含用户信息的接缝处留一些扩展点
核心扩展点:
public interface LoginPasswordVerifier {/*** 登录密码验证接口** @param user 目标用户* @param request 当前密码登录请求信息*/void passwordVerify(UcUser user, AbstractLoginByPasswordRequest request);}
扩展生效方式:
通过 @Bean 注解 & @Conditional 系列注解,实现扩展实现类的注册,示例如下:
@Configurationpublic class DracoServerConfiguration {@Bean@ConditionalOnProperty(prefix = "draco.server.login-security",name = "enable", havingValue = "true", matchIfMissing = true)public DefaultLoginPasswordVerifier defaultLoginPasswordVerifier(PasswordMatcher passwordMatcher,LoginLimitCache loginLimitCache) {return new DefaultLoginPasswordVerifier(loginLimitCache, passwordMatcher);}}
触发时机:
以用户名密码登录为例,校验用户名密码的逻辑统一使用扩展点完成:
public class LoginManage {...public TokenInfo loginByUsernameAndPassword(LoginByUsernameAndPasswordRequest request) {// 根据参数查询用户信息UcUser criteria = new UcUser();criteria.setTenantId(request.getTenantId());criteria.setUsername(request.getUsername());// todo 替换接口 find by usernameUcUser user = ucUserManage.findUserByOptionalParam(criteria);if (user == null) {throw new ServiceException(UcLoginErrorCodeMap.USER_NOT_EXIST);}AbstractLoginBeforeHandler.handle(request, user);// 校验密码是否匹配this.checkPasswordMatch(user, request);// 生成 token 信息TokenInfo tokenInfo = tokenManage.generateTokenInfo(request, user);AbstractLoginAfterHandler.handle(request, user, tokenInfo);return tokenInfo;}private void checkPasswordMatch(UcUser user, AbstractLoginByPasswordRequest request) {loginPasswordVerifier.passwordVerify(user, request);}...}
服务端token生成扩展点
设计目的:
因为有些项目不希望token的字符串太长(真的遇到过),因此这里需要开放token的生成逻辑给项目侧
核心扩展点:
public interface TokenGenerator {/*** token 生成核心接口** @param request token生成请求* @return token信息*/TokenInfo tokenGenerate(TokenGenerateRequest request);}
扩展生效方式:
通过 @Bean 注解 & @Conditional 系列注解,实现扩展实现类的注册,示例如下:
@Configurationpublic class DracoServerConfiguration {@Bean@ConditionalOnMissingBean(TokenGenerator.class)public TokenGenerator tokenMatcher() {return new DefaultTokenGenerator();}}
用户名生成扩展点
设计目的:
因为使用用户名密码登录,需要有默认用户名生成,同时,因为用户名生成需保证唯一,所以用户中心默认提供了一版用户名实现方式,项目测可以自主扩展
核心扩展点:
public interface UsernameGenerator {/*** 生成用户名** @param user 用户* @return 用户名*/String generateUsername(UcUser user);}
扩展生效方式:
通过 @Bean 注解 & @Conditional 系列注解,实现扩展实现类的注册,示例如下:
...@Bean@ConditionalOnMissingBean(UsernameGenerator.class)public UsernameGenerator usernameGenerator() {return new DefaultUsernameGenerator();}...
Web-SDK 用户Mock 功能扩展点:
设计目的:
因为用户中心的sdk 会被各个应用使用,但是不是每个应用在开发阶段就会链接用户中心服务,也不是每个应用每次接口调试都想走一遍用户登录流程,为了简化开发阶段的调试成本,用户中心的sdk需要提供 mock 用户的能力。
核心扩展点:
@Configurationpublic class DracoWebAutoconfigure {...@Bean@ConditionalOnProperty(prefix = "draco.mock", value = "enable", havingValue = "true")public FilterRegistrationBean registrationBean() {FilterRegistrationBean registrationBean = new FilterRegistrationBean();registrationBean.setFilter(new UserCenterLoginMockContextFilter());registrationBean.addUrlPatterns("/*");registrationBean.setOrder(UserCenterLoginMockContextFilter.ORDER);return registrationBean;}...}
扩展生效方式:
draco:mock:enable: true
用户中心API文档整理
用户中心接口文档
简介:
如有任何疑问,可以联系@冠羽
HOST:draco-web-test.captain.terminus.io
联系人:冠羽
Version:1.0
接口路径:/v2/api-docs
三方服务
QQ登录接口
接口描述:
接口地址:/api/user/web/third-part/app/qq/login
请求方式:POST
consumes:["application/json"]
produces:["*/*"]
请求示例:
{"accessToken": "","appName": "","bind": true,"openId": "","unionId": ""}
请求参数:
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| authInfo | authInfo | body | true | AppAuthQQBean | AppAuthQQBean |
schema属性说明
AppAuthQQBean
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| accessToken | body | false | string | ||
| appName | body | false | string | ||
| bind | body | false | boolean | ||
| openId | body | false | string | ||
| unionId | body | false | string |
响应示例:
{"expireTime": 0,"extra": {},"tenantId": 0,"token": "","userId": 0}
响应参数:
| 参数名称 | 参数说明 | 类型 | schema |
|---|---|---|---|
| expireTime | 过期时长(秒) | integer(int32) | integer(int32) |
| extra | object | ||
| tenantId | integer(int32) | integer(int32) | |
| token | token的值 | string | |
| userId | 用户ID | integer(int64) | integer(int64) |
响应状态:
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK | TokenInfo |
| 201 | Created | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Not Found |
微信登录接口
接口描述:
接口地址:/api/user/web/third-part/app/we-chat/login
请求方式:POST
consumes:["application/json"]
produces:["*/*"]
请求示例:
{"appName": "","bind": true,"code": ""}
请求参数:
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| authInfo | authInfo | body | true | AppAuthWeChatBean | AppAuthWeChatBean |
schema属性说明
AppAuthWeChatBean
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| appName | body | false | string | ||
| bind | body | false | boolean | ||
| code | body | false | string |
响应示例:
{"expireTime": 0,"extra": {},"tenantId": 0,"token": "","userId": 0}
响应参数:
| 参数名称 | 参数说明 | 类型 | schema |
|---|---|---|---|
| expireTime | 过期时长(秒) | integer(int32) | integer(int32) |
| extra | object | ||
| tenantId | integer(int32) | integer(int32) | |
| token | token的值 | string | |
| userId | 用户ID | integer(int64) | integer(int64) |
响应状态:
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK | TokenInfo |
| 201 | Created | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Not Found |
微博登录接口
接口描述:
接口地址:/api/user/web/third-part/app/wei-bo/login
请求方式:POST
consumes:["application/json"]
produces:["*/*"]
请求示例:
{"accessToken": "","appName": "","bind": true}
请求参数:
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| authInfo | authInfo | body | true | AppAuthWeiBoBean | AppAuthWeiBoBean |
schema属性说明
AppAuthWeiBoBean
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| accessToken | body | false | string | ||
| appName | body | false | string | ||
| bind | body | false | boolean |
响应示例:
{"expireTime": 0,"extra": {},"tenantId": 0,"token": "","userId": 0}
响应参数:
| 参数名称 | 参数说明 | 类型 | schema |
|---|---|---|---|
| expireTime | 过期时长(秒) | integer(int32) | integer(int32) |
| extra | object | ||
| tenantId | integer(int32) | integer(int32) | |
| token | token的值 | string | |
| userId | 用户ID | integer(int64) | integer(int64) |
响应状态:
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK | TokenInfo |
| 201 | Created | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Not Found |
小程序-绑定手机号请求提交
接口描述:
接口地址:/api/user/web/third-part/app/wx-app/bind
请求方式:POST
consumes:["application/json"]
produces:["*/*"]
请求示例:
{"avatarUrl": "","encryptedData": "","iv": "","nickName": ""}
请求参数:
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| WxAppBindBeanRequest | WxAppBindBeanRequest | body | true | WxAppBindBean | WxAppBindBean |
schema属性说明
WxAppBindBean
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| avatarUrl | 微信用户头像 | body | true | string | |
| encryptedData | 加密数据 | body | true | string | |
| iv | 初始向量 | body | true | string | |
| nickName | 微信用户昵称 | body | true | string |
响应示例:
{"expireTime": 0,"extra": {},"tenantId": 0,"token": "","userId": 0}
响应参数:
| 参数名称 | 参数说明 | 类型 | schema |
|---|---|---|---|
| expireTime | 过期时长(秒) | integer(int32) | integer(int32) |
| extra | object | ||
| tenantId | integer(int32) | integer(int32) | |
| token | token的值 | string | |
| userId | 用户ID | integer(int64) | integer(int64) |
响应状态:
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK | TokenInfo |
| 201 | Created | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Not Found |
微信小程序登录接口
接口描述:
接口地址:/api/user/web/third-part/app/wx-app/login
请求方式:POST
consumes:["application/json"]
produces:["*/*"]
请求示例:
{"appName": "","avatarUrl": "","bind": true,"code": "","nickName": ""}
请求参数:
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| authInfo | authInfo | body | true | AppAuthWxAppBean | AppAuthWxAppBean |
schema属性说明
AppAuthWxAppBean
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| appName | body | false | string | ||
| avatarUrl | body | false | string | ||
| bind | body | false | boolean | ||
| code | body | false | string | ||
| nickName | body | false | string |
响应示例:
{"expireTime": 0,"extra": {},"tenantId": 0,"token": "","userId": 0}
响应参数:
| 参数名称 | 参数说明 | 类型 | schema |
|---|---|---|---|
| expireTime | 过期时长(秒) | integer(int32) | integer(int32) |
| extra | object | ||
| tenantId | integer(int32) | integer(int32) | |
| token | token的值 | string | |
| userId | 用户ID | integer(int64) | integer(int64) |
响应状态:
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK | TokenInfo |
| 201 | Created | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Not Found |
三方登录服务
接口描述:
接口地址:/api/user/web/third-part/auth/{thirdPartType}
请求方式:GET
consumes:``
produces:["*/*"]
请求参数:
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| code | 回调编码 | query | true | string | |
| error | 回调错误信息 | query | false | string | |
| state | 存放目标URL和防止CORS | query | false | string | |
| thirdPartType | 登录方式 | path | true | string |
响应示例:
响应参数:
暂无
响应状态:
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Not Found |
三方认证服务
接口描述:
接口地址:/api/user/web/third-part/authorization
请求方式:GET
consumes:``
produces:["*/*"]
请求参数:
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| appName | appName | query | false | string | |
| targetUrl | 回调地址 | query | true | string | |
| type | 登录方式 | query | true | string |
响应示例:
响应参数:
暂无
响应状态:
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Not Found |
三方认证服务
接口描述:
接口地址:/api/user/web/third-part/authorization
请求方式:POST
consumes:["application/json"]
produces:["*/*"]
请求示例:
{"appName": "","targetUrl": "","type": "github,wechat,qq,weibo,wxapp,wechat_mp"}
请求参数:
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| request | request | body | true | AuthorizeByThirdPartBean | AuthorizeByThirdPartBean |
schema属性说明
AuthorizeByThirdPartBean
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| appName | 应用名称 | body | false | string | |
| targetUrl | 登录成功重定向地址 | body | true | string | |
| type | 第三方类型 | body | true | string |
响应示例:
响应参数:
暂无
响应状态:
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK | |
| 201 | Created | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Not Found |
绑定当前用户服务
接口描述:
接口地址:/api/user/web/third-part/bind-current-user
请求方式:GET
consumes:``
produces:["*/*"]
请求参数:
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| appName | appName | query | false | string | |
| targetUrl | 回调地址 | query | true | string | |
| type | 登录方式 | query | true | string |
响应示例:
响应参数:
暂无
响应状态:
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Not Found |
绑定当前用户服务
接口描述:
接口地址:/api/user/web/third-part/bind-current-user
请求方式:POST
consumes:["application/json"]
produces:["*/*"]
请求示例:
{"appName": "","targetUrl": "","type": "github,wechat,qq,weibo,wxapp,wechat_mp","userId": 0}
请求参数:
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| request | request | body | true | ThirdPartBindBean | ThirdPartBindBean |
schema属性说明
ThirdPartBindBean
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| appName | 应用名称 | body | false | string | |
| targetUrl | 登录成功重定向地址 | body | true | string | |
| type | 第三方类型 | body | true | string | |
| userId | 要绑定的用户Id | body | false | integer(int64) |
响应示例:
响应参数:
暂无
响应状态:
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK | |
| 201 | Created | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Not Found |
三方-绑定手机号请求提交
接口描述:
接口地址:/api/user/web/third-part/bind/mobile-by-sms-code
请求方式:POST
consumes:["application/json"]
produces:["*/*"]
请求示例:
{"avatarUrl": "","ip": "","isApp": true,"mobile": "15950552810","nickName": "15950552810","prefix": "86","smsCode": "4567","thirdAccountParam": {"accountId": "","accountName": "","accountType": "","appId": "","extra": {},"openId": "","originalJson": "","userId": 0}}
请求参数:
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| request | request | body | true | ThirdAccountBindByMobileAndSmsCodeRequest | ThirdAccountBindByMobileAndSmsCodeRequest |
schema属性说明
ThirdAccountBindByMobileAndSmsCodeRequest
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| avatarUrl | 微信用户头像 | body | false | string | |
| ip | ip地址 | body | false | string | |
| isApp | 是否APP调用,false指代PC调用 | body | true | boolean | |
| mobile | 手机号 | body | true | string | |
| nickName | 微信用户昵称 | body | false | string | |
| prefix | 手机号前缀 | body | false | string | |
| smsCode | 短信验证码 | body | true | string | |
| thirdAccountParam | 三方账户信息 | body | true | ThirdAccountParam | ThirdAccountParam |
ThirdAccountParam
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| accountId | 三方账户id | body | false | string | |
| accountName | 三方账户名 | body | false | string | |
| accountType | 三方账户类型,e.g:QQ、WECHAT、WECHAT-MP、WEIBO | body | false | string | |
| appId | 三方客户端id | body | false | string | |
| extra | body | false | object | ||
| openId | 三方账户 openId | body | false | string | |
| originalJson | 三方原始信息 | body | false | string | |
| userId | 关联的用户主表id | body | false | integer(int64) |
响应示例:
{"expireTime": 0,"extra": {},"tenantId": 0,"token": "","userId": 0}
响应参数:
| 参数名称 | 参数说明 | 类型 | schema |
|---|---|---|---|
| expireTime | 过期时长(秒) | integer(int32) | integer(int32) |
| extra | object | ||
| tenantId | integer(int32) | integer(int32) | |
| token | token的值 | string | |
| userId | 用户ID | integer(int64) | integer(int64) |
响应状态:
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK | TokenInfo |
| 201 | Created | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Not Found |
三方-绑定手机号验证码发送服务
接口描述:
接口地址:/api/user/web/third-part/bind/mobile-send-sms-code
请求方式:POST
consumes:["application/json"]
produces:["*/*"]
请求示例:
{"avatarUrl": "","captcha": "","ip": "","isApp": true,"mobile": "15950552810","nickName": "15950552810","prefix": "86","thirdAccountParam": {"accountId": "","accountName": "","accountType": "","appId": "","extra": {},"openId": "","originalJson": "","userId": 0},"token": ""}
请求参数:
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| request | request | body | true | ThirdAccountBindByMobileSendSmsCodeRequest | ThirdAccountBindByMobileSendSmsCodeRequest |
schema属性说明
ThirdAccountBindByMobileSendSmsCodeRequest
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| avatarUrl | 微信用户头像 | body | false | string | |
| captcha | 图片验证码 | body | false | string | |
| ip | ip地址 | body | false | string | |
| isApp | 是否APP调用,false指代PC调用 | body | true | boolean | |
| mobile | 手机号 | body | true | string | |
| nickName | 微信用户昵称 | body | false | string | |
| prefix | 手机号前缀 | body | false | string | |
| thirdAccountParam | 三方账户信息 | body | true | ThirdAccountParam | ThirdAccountParam |
| token | 图片验证码token | body | false | string |
ThirdAccountParam
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| accountId | 三方账户id | body | false | string | |
| accountName | 三方账户名 | body | false | string | |
| accountType | 三方账户类型,e.g:QQ、WECHAT、WECHAT-MP、WEIBO | body | false | string | |
| appId | 三方客户端id | body | false | string | |
| extra | body | false | object | ||
| openId | 三方账户 openId | body | false | string | |
| originalJson | 三方原始信息 | body | false | string | |
| userId | 关联的用户主表id | body | false | integer(int64) |
响应示例:
响应参数:
暂无
响应状态:
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK | |
| 201 | Created | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Not Found |
查询当前用户已绑定三方类型清单
接口描述:
接口地址:/api/user/web/third-part/list-bound
请求方式:GET
consumes:``
produces:["*/*"]
请求参数:
暂无
响应示例:
响应参数:
暂无
响应状态:
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Not Found |
三方绑定解绑接口
接口描述:
接口地址:/api/user/web/third-part/unbind
请求方式:POST
consumes:["application/json"]
produces:["*/*"]
请求示例:
{"thirdAccountType": ""}
请求参数:
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| request | request | body | true | UnBindThirdAccountRequest | UnBindThirdAccountRequest |
schema属性说明
UnBindThirdAccountRequest
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| thirdAccountType | 目标解绑三方渠道 | body | true | string |
响应示例:
响应参数:
暂无
响应状态:
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK | |
| 201 | Created | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Not Found |
图片验证码服务
校验图片验证码-公共接口
接口描述:
接口地址:/api/user/web/check-captcha
请求方式:POST
consumes:["application/json"]
produces:["*/*"]
请求示例:
{"captcha": "","token": ""}
请求参数:
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| captchaRequest | 校验验证码请求 | body | true | CheckCaptchaRequest | CheckCaptchaRequest |
schema属性说明
CheckCaptchaRequest
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| captcha | 图片验证码答案 | body | true | string | |
| token | 图片验证码 token | body | true | string |
响应示例:
响应参数:
暂无
响应状态:
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK | |
| 201 | Created | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Not Found |
获取图片验证码-公共接口
接口描述:
接口地址:/api/user/web/get-captcha
请求方式:GET
consumes:``
produces:["*/*"]
请求参数:
暂无
响应示例:
{"imageUrl": "","token": ""}
响应参数:
| 参数名称 | 参数说明 | 类型 | schema |
|---|---|---|---|
| imageUrl | string | ||
| token | string |
响应状态:
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK | CaptchaBean |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Not Found |
密码服务
修改密码
接口描述:
接口地址:/api/user/web/password/change-password
请求方式:PUT
consumes:["application/json"]
produces:["*/*"]
请求示例:
{"newPassword": "","oldPassword": ""}
请求参数:
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| request | 修改用户密码请求 | body | true | ChangeUserPasswordRequest | ChangeUserPasswordRequest |
schema属性说明
ChangeUserPasswordRequest
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| newPassword | 新密码 | body | true | string | |
| oldPassword | 原始密码 | body | false | string |
响应示例:
响应参数:
暂无
响应状态:
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK | |
| 201 | Created | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Not Found |
忘记密码-通过邮件重置密码
接口描述:
接口地址:/api/user/web/password/reset-by-email
请求方式:POST
consumes:["application/json"]
produces:["*/*"]
请求示例:
{"confirm": "","email": "","emailCode": "","password": ""}
请求参数:
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| request | 忘记密码-通过短信验证码设置密码请求 | body | true | PasswordResetByEmailCodeRequest | PasswordResetByEmailCodeRequest |
schema属性说明
PasswordResetByEmailCodeRequest
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| confirm | 确认密码 | body | true | string | |
| 邮箱 | body | true | string | ||
| emailCode | 邮件验证码 | body | true | string | |
| password | 密码 | body | true | string |
响应示例:
响应参数:
暂无
响应状态:
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK | |
| 201 | Created | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Not Found |
忘记密码-通过短信重置密码
接口描述:
接口地址:/api/user/web/password/reset-by-sms
请求方式:POST
consumes:["application/json"]
produces:["*/*"]
请求示例:
{"confirm": "","mobile": "","password": "","smsCode": ""}
请求参数:
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| request | 忘记密码-通过短信验证码设置密码请求 | body | true | PasswordResetBySmsCodeRequest | PasswordResetBySmsCodeRequest |
schema属性说明
PasswordResetBySmsCodeRequest
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| confirm | 确认密码 | body | true | string | |
| mobile | 手机号 | body | true | string | |
| password | 密码 | body | true | string | |
| smsCode | 短信验证码 | body | true | string |
响应示例:
响应参数:
暂无
响应状态:
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK | |
| 201 | Created | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Not Found |
忘记密码-发送邮件验证码
接口描述:
接口地址:/api/user/web/password/send-email
请求方式:POST
consumes:["application/json"]
produces:["*/*"]
请求示例:
{"captcha": "","email": "","token": ""}
请求参数:
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| request | 发送忘记密码邮箱验证码请求 | body | true | PasswordResetSendEmailCodeRequest | PasswordResetSendEmailCodeRequest |
schema属性说明
PasswordResetSendEmailCodeRequest
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| captcha | 图片验证码 | body | false | string | |
| 邮箱 | body | true | string | ||
| token | 图片验证码token | body | false | string |
响应示例:
响应参数:
暂无
响应状态:
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK | |
| 201 | Created | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Not Found |
忘记密码-发送短信验证码
接口描述:
接口地址:/api/user/web/password/send-sms
请求方式:POST
consumes:["application/json"]
produces:["*/*"]
请求示例:
{"captcha": "","mobile": "","token": ""}
请求参数:
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| request | 发送忘记密码短信验证码请求 | body | true | PasswordResetSendSmsCodeRequest | PasswordResetSendSmsCodeRequest |
schema属性说明
PasswordResetSendSmsCodeRequest
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| captcha | 图片验证码 | body | false | string | |
| mobile | 手机号 | body | true | string | |
| token | 图片验证码token | body | false | string |
响应示例:
响应参数:
暂无
响应状态:
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK | |
| 201 | Created | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Not Found |
注册服务
注册-根据唯一标识校验用户是否可用
接口描述:
接口地址:/api/user/web/sign-up/check-exist-by-identifier
请求方式:GET
consumes:``
produces:["*/*"]
请求参数:
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| identifier | identifier | query | true | string |
响应示例:
响应参数:
暂无
响应状态:
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Not Found |
注册-提交邮件注册请求
接口描述:
接口地址:/api/user/web/sign-up/register-by-email-code
请求方式:POST
consumes:["application/json"]
produces:["*/*"]
请求示例:
{"channel": "","channelType": "","email": "","emailCode": "","ip": "","isApp": true,"nickname": "","password": "","prefix": "86"}
请求参数:
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| request | 邮箱注册 | body | true | SignUpByEmailAndEmailCodeRequest | SignUpByEmailAndEmailCodeRequest |
schema属性说明
SignUpByEmailAndEmailCodeRequest
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| channel | 注册渠道 | body | false | string | |
| channelType | 注册渠道类型 | body | false | string | |
| 邮箱 | body | false | string | ||
| emailCode | 邮件验证码 | body | false | string | |
| ip | ip地址 | body | false | string | |
| isApp | 是否APP调用,false指代PC调用 | body | true | boolean | |
| nickname | 昵称 | body | false | string | |
| password | 密码 | body | false | string | |
| prefix | body | false | string |
响应示例:
{"expireTime": 0,"extra": {},"tenantId": 0,"token": "","userId": 0}
响应参数:
| 参数名称 | 参数说明 | 类型 | schema |
|---|---|---|---|
| expireTime | 过期时长(秒) | integer(int32) | integer(int32) |
| extra | object | ||
| tenantId | integer(int32) | integer(int32) | |
| token | token的值 | string | |
| userId | 用户ID | integer(int64) | integer(int64) |
响应状态:
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK | TokenInfo |
| 201 | Created | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Not Found |
注册-提交手机号注册请求
接口描述:
接口地址:/api/user/web/sign-up/register-by-sms-code
请求方式:POST
consumes:["application/json"]
produces:["*/*"]
请求示例:
{"channel": "","channelType": "","ip": "","isApp": true,"mobile": "15950552810","nickname": "","password": "","prefix": "86","smsCode": "4567"}
请求参数:
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| request | 手机号注册 | body | true | SignUpByMobileAndSmsCodeRequest | SignUpByMobileAndSmsCodeRequest |
schema属性说明
SignUpByMobileAndSmsCodeRequest
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| channel | 注册渠道 | body | false | string | |
| channelType | 渠道类型 | body | false | string | |
| ip | ip地址 | body | false | string | |
| isApp | 是否APP调用,false指代PC调用 | body | true | boolean | |
| mobile | 手机号 | body | true | string | |
| nickname | 昵称 | body | false | string | |
| password | 密码 | body | false | string | |
| prefix | 手机号前缀 | body | false | string | |
| smsCode | 短信验证码 | body | true | string |
响应示例:
{"expireTime": 0,"extra": {},"tenantId": 0,"token": "","userId": 0}
响应参数:
| 参数名称 | 参数说明 | 类型 | schema |
|---|---|---|---|
| expireTime | 过期时长(秒) | integer(int32) | integer(int32) |
| extra | object | ||
| tenantId | integer(int32) | integer(int32) | |
| token | token的值 | string | |
| userId | 用户ID | integer(int64) | integer(int64) |
响应状态:
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK | TokenInfo |
| 201 | Created | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Not Found |
注册-发送邮件验证码
接口描述:
接口地址:/api/user/web/sign-up/register-send-email-code
请求方式:POST
consumes:["application/json"]
produces:["*/*"]
请求示例:
{"captcha": "","email": "","token": ""}
请求参数:
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| request | request | body | true | SignUpByEmailSendEmailCodeRequest | SignUpByEmailSendEmailCodeRequest |
schema属性说明
SignUpByEmailSendEmailCodeRequest
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| captcha | 图片验证码 | body | false | string | |
| 邮箱 | body | true | string | ||
| token | 图片验证码token | body | false | string |
响应示例:
响应参数:
暂无
响应状态:
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK | |
| 201 | Created | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Not Found |
注册-发送手机验证码
接口描述:
接口地址:/api/user/web/sign-up/register-send-sms-code
请求方式:POST
consumes:["application/json"]
produces:["*/*"]
请求示例:
{"captcha": "","mobile": "15950552810","prefix": "86","token": ""}
请求参数:
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| request | request | body | true | SignUpByMobileSendSmsCodeRequest | SignUpByMobileSendSmsCodeRequest |
schema属性说明
SignUpByMobileSendSmsCodeRequest
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| captcha | 图片验证码 | body | false | string | |
| mobile | body | true | string | ||
| prefix | body | false | string | ||
| token | 图片验证码token | body | false | string |
响应示例:
响应参数:
暂无
响应状态:
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK | |
| 201 | Created | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Not Found |
用户手机号服务
绑定手机号-校验短信验证码并绑定
接口描述:
接口地址:/api/user/web/mobile/bind
请求方式:POST
consumes:["application/json"]
produces:["*/*"]
请求示例:
{"mobile": "15950552810","prefix": "86","smsCode": "4567"}
请求参数:
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| request | request | body | true | BindByMobileAndSmsCodeRequest | BindByMobileAndSmsCodeRequest |
schema属性说明
BindByMobileAndSmsCodeRequest
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| mobile | 手机号 | body | true | string | |
| prefix | 手机号前缀 | body | false | string | |
| smsCode | 短信验证码 | body | true | string |
响应示例:
{"error": "","result": true,"success": true}
响应参数:
| 参数名称 | 参数说明 | 类型 | schema |
|---|---|---|---|
| error | string | ||
| result | boolean | ||
| success | boolean |
响应状态:
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK | Response«boolean» |
| 201 | Created | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Not Found |
绑定手机号-发送短信验证码
接口描述:
接口地址:/api/user/web/mobile/bind/send-sms-code
请求方式:POST
consumes:["application/json"]
produces:["*/*"]
请求示例:
{"captcha": "","mobile": "15950552810","prefix": "86","token": ""}
请求参数:
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| request | request | body | true | BindMobileSendSmsCodeRequest | BindMobileSendSmsCodeRequest |
schema属性说明
BindMobileSendSmsCodeRequest
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| captcha | 图片验证码 | body | false | string | |
| mobile | 手机号 | body | true | string | |
| prefix | 手机号前缀 | body | false | string | |
| token | 图片验证码token | body | false | string |
响应示例:
{"error": "","result": true,"success": true}
响应参数:
| 参数名称 | 参数说明 | 类型 | schema |
|---|---|---|---|
| error | string | ||
| result | boolean | ||
| success | boolean |
响应状态:
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK | Response«boolean» |
| 201 | Created | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Not Found |
重置手机号-验证新手机号并且完成重置
接口描述:
接口地址:/api/user/web/mobile/reset
请求方式:POST
consumes:["application/json"]
produces:["*/*"]
请求示例:
{"noticeToken": "","receiver": "","userId": 0,"verifyCode": "","verifyToken": ""}
请求参数:
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| request | 重置手机号请求 | body | true | ResetMobileRequest | ResetMobileRequest |
schema属性说明
ResetMobileRequest
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| noticeToken | 通知模板的key | body | true | string | |
| receiver | 接收人 | body | true | string | |
| userId | 用户id | body | true | integer(int64) | |
| verifyCode | 短信验证码 | body | true | string | |
| verifyToken | 验证旧手机号通过的token | body | true | string |
响应示例:
响应参数:
暂无
响应状态:
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK | |
| 201 | Created | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Not Found |
重置手机号-验证码校验
接口描述:
接口地址:/api/user/web/mobile/reset/check-sms-code
请求方式:POST
consumes:["application/json"]
produces:["*/*"]
请求示例:
{"needVerifyToken": true,"noticeToken": "","noticeType": "","receiver": "","verifyCode": ""}
请求参数:
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| request | 校验验证码请求 | body | true | CheckVerifyCodeRequest | CheckVerifyCodeRequest |
schema属性说明
CheckVerifyCodeRequest
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| needVerifyToken | 是否需要返回验证通过的token(用于防止跳过步骤) | body | false | boolean | |
| noticeToken | 通知模板的key | body | true | string | |
| noticeType | 通知类型 SMS、EMAIL,可用值:SMS,EMAIL | body | true | string | |
| receiver | 接收人 | body | true | string | |
| verifyCode | 验证码 | body | true | string |
响应示例:
{"passed": true,"verifyToken": ""}
响应参数:
| 参数名称 | 参数说明 | 类型 | schema |
|---|---|---|---|
| passed | 是否通过 | boolean | |
| verifyToken | 验证通过后生产的token | string |
响应状态:
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK | VerifyCodeCheckInfo |
| 201 | Created | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Not Found |
重置手机号-手机号发送短信验证码
接口描述:
接口地址:/api/user/web/mobile/reset/send-sms
请求方式:POST
consumes:["application/json"]
produces:["*/*"]
请求示例:
{"captcha": "","noticeToken": "","noticeType": "","receiver": "","token": ""}
请求参数:
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| request | request | body | true | SendNoticeRequest | SendNoticeRequest |
schema属性说明
SendNoticeRequest
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| captcha | 图片验证码 | body | true | string | |
| noticeToken | 通知模板的key | body | true | string | |
| noticeType | 通知类型,可用值:SMS,EMAIL | body | true | string | |
| receiver | 接收人 | body | true | string | |
| token | 图片验证码token | body | true | string |
响应示例:
响应参数:
暂无
响应状态:
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK | |
| 201 | Created | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Not Found |
解绑手机号-校验短信验证码并绑定
接口描述:
接口地址:/api/user/web/mobile/unbind
请求方式:POST
consumes:["application/json"]
produces:["*/*"]
请求示例:
{"mobile": "15950552810","prefix": "86","smsCode": "4567"}
请求参数:
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| request | request | body | true | UnBindMobileAndSmsCodeRequest | UnBindMobileAndSmsCodeRequest |
schema属性说明
UnBindMobileAndSmsCodeRequest
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| mobile | body | true | string | ||
| prefix | body | false | string | ||
| smsCode | body | true | string |
响应示例:
{"error": "","result": true,"success": true}
响应参数:
| 参数名称 | 参数说明 | 类型 | schema |
|---|---|---|---|
| error | string | ||
| result | boolean | ||
| success | boolean |
响应状态:
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK | Response«boolean» |
| 201 | Created | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Not Found |
解绑手机号-发送短信验证码
接口描述:
接口地址:/api/user/web/mobile/unbind/send-sms-code
请求方式:POST
consumes:["application/json"]
produces:["*/*"]
请求示例:
{"captcha": "","mobile": "15950552810","prefix": "86","token": ""}
请求参数:
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| request | request | body | true | UnBindMobileSendSmsCodeRequest | UnBindMobileSendSmsCodeRequest |
schema属性说明
UnBindMobileSendSmsCodeRequest
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| captcha | 图片验证码 | body | false | string | |
| mobile | 手机号 | body | true | string | |
| prefix | 手机号前缀 | body | false | string | |
| token | 图片验证码token | body | false | string |
响应示例:
{"error": "","result": true,"success": true}
响应参数:
| 参数名称 | 参数说明 | 类型 | schema |
|---|---|---|---|
| error | string | ||
| result | boolean | ||
| success | boolean |
响应状态:
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK | Response«boolean» |
| 201 | Created | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Not Found |
用户服务
获取当前用户
接口描述:
接口地址:/api/user/web/current-user
请求方式:GET
consumes:``
produces:["*/*"]
请求参数:
暂无
响应示例:
{"error": "","result": {"avatar": "","channel": "","channelType": "","createdAt": "","email": "","enabled": true,"extra": {},"id": 0,"locked": true,"mobile": "","nickname": "","passwordExist": true,"pwdExpireAt": "","source": "","sourceType": "","tag": "","tenantId": 0,"updatedAt": "","userDetail": {},"username": ""},"success": true}
响应参数:
| 参数名称 | 参数说明 | 类型 | schema |
|---|---|---|---|
| error | string | ||
| result | UserInfo | UserInfo | |
| success | boolean |
schema属性说明
UserInfo
| 参数名称 | 参数说明 | 类型 | schema |
|---|---|---|---|
| avatar | 头像 | string | |
| channel | 注册渠道 | string | |
| channelType | 渠道类型 | string | |
| createdAt | 创建时间 | string(date-time) | |
| 邮箱 | string | ||
| enabled | 是否启用 | boolean | |
| extra | 扩展字段 | object | |
| id | 主键 | integer(int64) | |
| locked | 冻结FLAG(0:NOT,1:YES) | boolean | |
| mobile | 手机号 | string | |
| nickname | 昵称 | string | |
| passwordExist | 密码是否存在 | boolean | |
| pwdExpireAt | 过期时间 | string(date-time) | |
| source | 用户来源 | string | |
| sourceType | 来源类型 | string | |
| tag | 标签 | string | |
| tenantId | 租户ID | integer(int32) | |
| updatedAt | 更新时间 | string(date-time) | |
| userDetail | 用户详细信息 | object | |
| username | 用户名 | string |
响应状态:
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK | Response«UserInfo» |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Not Found |
用户注销
接口描述:
接口地址:/api/user/web/user-destroy
请求方式:PUT
consumes:["application/json"]
produces:["*/*"]
请求参数:
暂无
响应示例:
{"error": "","result": true,"success": true}
响应参数:
| 参数名称 | 参数说明 | 类型 | schema |
|---|---|---|---|
| error | string | ||
| result | boolean | ||
| success | boolean |
响应状态:
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK | Response«boolean» |
| 201 | Created | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Not Found |
获取用户信息接口
接口描述:
接口地址:/api/user/web/user-info
请求方式:GET
consumes:``
produces:["*/*"]
请求参数:
暂无
响应示例:
{"avatar": "","channel": "","channelType": "","createdAt": "","email": "","enabled": true,"extra": {},"id": 0,"locked": true,"mobile": "","nickname": "","passwordExist": true,"pwdExpireAt": "","source": "","sourceType": "","tag": "","tenantId": 0,"updatedAt": "","userDetail": {},"username": ""}
响应参数:
| 参数名称 | 参数说明 | 类型 | schema |
|---|---|---|---|
| avatar | 头像 | string | |
| channel | 注册渠道 | string | |
| channelType | 渠道类型 | string | |
| createdAt | 创建时间 | string(date-time) | string(date-time) |
| 邮箱 | string | ||
| enabled | 是否启用 | boolean | |
| extra | 扩展字段 | object | |
| id | 主键 | integer(int64) | integer(int64) |
| locked | 冻结FLAG(0:NOT,1:YES) | boolean | |
| mobile | 手机号 | string | |
| nickname | 昵称 | string | |
| passwordExist | 密码是否存在 | boolean | |
| pwdExpireAt | 过期时间 | string(date-time) | string(date-time) |
| source | 用户来源 | string | |
| sourceType | 来源类型 | string | |
| tag | 标签 | string | |
| tenantId | 租户ID | integer(int32) | integer(int32) |
| updatedAt | 更新时间 | string(date-time) | string(date-time) |
| userDetail | 用户详细信息 | object | |
| username | 用户名 | string |
响应状态:
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK | UserInfo |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Not Found |
更新用户信息
接口描述:
接口地址:/api/user/web/user-info
请求方式:PUT
consumes:["application/json"]
produces:["*/*"]
请求示例:
{"avatar": "","extra": {},"nickname": "","userDetail": {}}
请求参数:
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| request | request | body | true | ChangeUserInfoRequest | ChangeUserInfoRequest |
schema属性说明
ChangeUserInfoRequest
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| avatar | 头像 | body | false | string | |
| extra | 用户扩展字段 | body | false | object | |
| nickname | 用户昵称 | body | false | string | |
| userDetail | 用户详情 | body | false | object |
响应示例:
响应参数:
暂无
响应状态:
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK | |
| 201 | Created | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Not Found |
用户邮箱服务
绑定邮箱-校验邮件验证码并绑定
接口描述:
接口地址:/api/user/web/email/bind
请求方式:POST
consumes:["application/json"]
produces:["*/*"]
请求示例:
{"email": "","emailCode": ""}
请求参数:
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| request | request | body | true | BindByEmailAndEmailCodeRequest | BindByEmailAndEmailCodeRequest |
schema属性说明
BindByEmailAndEmailCodeRequest
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| 邮箱 | body | true | string | ||
| emailCode | 邮件验证码 | body | true | string |
响应示例:
响应参数:
暂无
响应状态:
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK | |
| 201 | Created | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Not Found |
绑定邮箱-发送邮件验证码
接口描述:
接口地址:/api/user/web/email/bind/send-email-code
请求方式:POST
consumes:["application/json"]
produces:["*/*"]
请求示例:
{"captcha": "","email": "","token": ""}
请求参数:
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| request | request | body | true | BindEmailSendEmailCodeRequest | BindEmailSendEmailCodeRequest |
schema属性说明
BindEmailSendEmailCodeRequest
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| captcha | 图片验证码 | body | false | string | |
| 邮箱 | body | true | string | ||
| token | 图片验证码token | body | false | string |
响应示例:
响应参数:
暂无
响应状态:
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK | |
| 201 | Created | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Not Found |
重置邮箱-验证新邮箱并且完成重置
接口描述:
接口地址:/api/user/web/email/reset
请求方式:POST
consumes:["application/json"]
produces:["*/*"]
请求示例:
{"receiver": "","userId": 0,"verifyCode": "","verifyToken": ""}
请求参数:
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| request | 重置邮箱请求 | body | true | ResetEmailRequest | ResetEmailRequest |
schema属性说明
ResetEmailRequest
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| receiver | 接收人 | body | true | string | |
| userId | 用户id | body | false | integer(int64) | |
| verifyCode | 邮件验证码 | body | true | string | |
| verifyToken | 验证旧邮箱通过的token | body | true | string |
响应示例:
响应参数:
暂无
响应状态:
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK | |
| 201 | Created | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Not Found |
重置邮箱-预校验
接口描述:
接口地址:/api/user/web/email/reset/check-email-code
请求方式:POST
consumes:["application/json"]
produces:["*/*"]
请求示例:
{"needVerifyToken": true,"noticeToken": "","noticeType": "","receiver": "","verifyCode": ""}
请求参数:
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| request | 校验验证码请求 | body | true | CheckVerifyCodeRequest | CheckVerifyCodeRequest |
schema属性说明
CheckVerifyCodeRequest
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| needVerifyToken | 是否需要返回验证通过的token(用于防止跳过步骤) | body | false | boolean | |
| noticeToken | 通知模板的key | body | true | string | |
| noticeType | 通知类型 SMS、EMAIL,可用值:SMS,EMAIL | body | true | string | |
| receiver | 接收人 | body | true | string | |
| verifyCode | 验证码 | body | true | string |
响应示例:
{"passed": true,"verifyToken": ""}
响应参数:
| 参数名称 | 参数说明 | 类型 | schema |
|---|---|---|---|
| passed | 是否通过 | boolean | |
| verifyToken | 验证通过后生产的token | string |
响应状态:
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK | VerifyCodeCheckInfo |
| 201 | Created | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Not Found |
重置邮箱-邮箱发送邮件验证码
接口描述:
接口地址:/api/user/web/email/reset/send-email
请求方式:POST
consumes:["application/json"]
produces:["*/*"]
请求示例:
{"captcha": "","noticeToken": "","noticeType": "","receiver": "","token": ""}
请求参数:
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| request | request | body | true | SendNoticeRequest | SendNoticeRequest |
schema属性说明
SendNoticeRequest
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| captcha | 图片验证码 | body | true | string | |
| noticeToken | 通知模板的key | body | true | string | |
| noticeType | 通知类型,可用值:SMS,EMAIL | body | true | string | |
| receiver | 接收人 | body | true | string | |
| token | 图片验证码token | body | true | string |
响应示例:
响应参数:
暂无
响应状态:
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK | |
| 201 | Created | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Not Found |
解绑邮箱-校验邮件验证码并解绑
接口描述:
接口地址:/api/user/web/email/unbind
请求方式:POST
consumes:["application/json"]
produces:["*/*"]
请求示例:
{"email": "","emailCode": ""}
请求参数:
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| request | request | body | true | UnBindEmailAndEmailCodeRequest | UnBindEmailAndEmailCodeRequest |
schema属性说明
UnBindEmailAndEmailCodeRequest
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| 邮箱 | body | true | string | ||
| emailCode | 邮件验证码 | body | true | string |
响应示例:
响应参数:
暂无
响应状态:
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK | |
| 201 | Created | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Not Found |
解绑邮箱-发送邮件验证码
接口描述:
接口地址:/api/user/web/email/unbind/send-email-code
请求方式:POST
consumes:["application/json"]
produces:["*/*"]
请求示例:
{"captcha": "","email": "","token": ""}
请求参数:
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| request | request | body | true | UnBindEmailSendEmailCodeRequest | UnBindEmailSendEmailCodeRequest |
schema属性说明
UnBindEmailSendEmailCodeRequest
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| captcha | 图片验证码 | body | false | string | |
| 邮箱 | body | true | string | ||
| token | 图片验证码token | body | false | string |
响应示例:
响应参数:
暂无
响应状态:
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK | |
| 201 | Created | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Not Found |
登录服务
邮箱 + 密码登录接口
接口描述:
接口地址:/api/user/web/login/email
请求方式:POST
consumes:["application/json"]
produces:["*/*"]
请求示例:
{"captcha": "","email": "","ip": "","isApp": true,"password": "","token": ""}
请求参数:
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| request | request | body | true | LoginByEmailAndPasswordRequest | LoginByEmailAndPasswordRequest |
schema属性说明
LoginByEmailAndPasswordRequest
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| captcha | 图片验证码答案 | body | false | string | |
| 邮箱 | body | true | string | ||
| ip | ip地址 | body | false | string | |
| isApp | 是否APP调用,false指代PC调用 | body | true | boolean | |
| password | 密码 | body | true | string | |
| token | 图片验证码 token | body | false | string |
响应示例:
{"expireTime": 0,"extra": {},"tenantId": 0,"token": "","userId": 0}
响应参数:
| 参数名称 | 参数说明 | 类型 | schema |
|---|---|---|---|
| expireTime | 过期时长(秒) | integer(int32) | integer(int32) |
| extra | object | ||
| tenantId | integer(int32) | integer(int32) | |
| token | token的值 | string | |
| userId | 用户ID | integer(int64) | integer(int64) |
响应状态:
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK | TokenInfo |
| 201 | Created | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Not Found |
密码混登接口
接口描述:
接口地址:/api/user/web/login/identify
请求方式:POST
consumes:["application/json"]
produces:["*/*"]
请求示例:
{"captcha": "","identify": "","ip": "","isApp": true,"password": "","prefix": "86","token": ""}
请求参数:
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| request | request | body | true | LoginByPasswordRequest | LoginByPasswordRequest |
schema属性说明
LoginByPasswordRequest
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| captcha | 图片验证码答案 | body | false | string | |
| identify | 用户登录唯一标识:手机号/用户名/邮箱 | body | true | string | |
| ip | ip地址 | body | false | string | |
| isApp | 是否APP调用,false指代PC调用 | body | true | boolean | |
| password | 密码 | body | true | string | |
| prefix | 手机号前缀 | body | false | string | |
| token | 图片验证码 token | body | false | string |
响应示例:
{"expireTime": 0,"extra": {},"tenantId": 0,"token": "","userId": 0}
响应参数:
| 参数名称 | 参数说明 | 类型 | schema |
|---|---|---|---|
| expireTime | 过期时长(秒) | integer(int32) | integer(int32) |
| extra | object | ||
| tenantId | integer(int32) | integer(int32) | |
| token | token的值 | string | |
| userId | 用户ID | integer(int64) | integer(int64) |
响应状态:
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK | TokenInfo |
| 201 | Created | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Not Found |
根据邮件验证码登录
接口描述:
接口地址:/api/user/web/login/login-by-email-code
请求方式:POST
consumes:["application/json"]
produces:["*/*"]
请求示例:
{"email": "","emailCode": "","ip": "","isApp": true}
请求参数:
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| request | request | body | true | LoginByEmailAndEmailCodeRequest | LoginByEmailAndEmailCodeRequest |
schema属性说明
LoginByEmailAndEmailCodeRequest
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| 邮箱 | body | true | string | ||
| emailCode | 邮件验证码 | body | true | string | |
| ip | ip地址 | body | false | string | |
| isApp | 是否APP调用,false指代PC调用 | body | true | boolean |
响应示例:
{"expireTime": 0,"extra": {},"tenantId": 0,"token": "","userId": 0}
响应参数:
| 参数名称 | 参数说明 | 类型 | schema |
|---|---|---|---|
| expireTime | 过期时长(秒) | integer(int32) | integer(int32) |
| extra | object | ||
| tenantId | integer(int32) | integer(int32) | |
| token | token的值 | string | |
| userId | 用户ID | integer(int64) | integer(int64) |
响应状态:
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK | TokenInfo |
| 201 | Created | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Not Found |
根据手机验证码登录
接口描述:
接口地址:/api/user/web/login/login-by-sms-code
请求方式:POST
consumes:["application/json"]
produces:["*/*"]
请求示例:
{"ip": "","isApp": true,"mobile": "15950552810","prefix": "86","smsCode": "4567"}
请求参数:
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| request | request | body | true | LoginByMobileAndSmsCodeRequest | LoginByMobileAndSmsCodeRequest |
schema属性说明
LoginByMobileAndSmsCodeRequest
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| ip | ip地址 | body | false | string | |
| isApp | 是否APP调用,false指代PC调用 | body | true | boolean | |
| mobile | 手机号 | body | true | string | |
| prefix | 手机号前缀 | body | false | string | |
| smsCode | 短信验证码 | body | true | string |
响应示例:
{"expireTime": 0,"extra": {},"tenantId": 0,"token": "","userId": 0}
响应参数:
| 参数名称 | 参数说明 | 类型 | schema |
|---|---|---|---|
| expireTime | 过期时长(秒) | integer(int32) | integer(int32) |
| extra | object | ||
| tenantId | integer(int32) | integer(int32) | |
| token | token的值 | string | |
| userId | 用户ID | integer(int64) | integer(int64) |
响应状态:
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK | TokenInfo |
| 201 | Created | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Not Found |
校验密码登录是否需要验证码
接口描述:
接口地址:/api/user/web/login/login-captcha-challenge
请求方式:GET
consumes:``
produces:["*/*"]
请求参数:
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| identify | identify | query | false | string |
响应示例:
响应参数:
暂无
响应状态:
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Not Found |
发送邮件验证码
接口描述:
接口地址:/api/user/web/login/login-send-email-code
请求方式:POST
consumes:["application/json"]
produces:["*/*"]
请求示例:
{"captcha": "","email": "","token": ""}
请求参数:
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| request | request | body | true | LoginByEmailSendEmailCodeRequest | LoginByEmailSendEmailCodeRequest |
schema属性说明
LoginByEmailSendEmailCodeRequest
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| captcha | 图片验证码 | body | false | string | |
| 邮箱 | body | true | string | ||
| token | 图片验证码token | body | false | string |
响应示例:
响应参数:
暂无
响应状态:
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK | |
| 201 | Created | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Not Found |
登录发送手机验证码接口
接口描述:
接口地址:/api/user/web/login/login-send-sms-code
请求方式:POST
consumes:["application/json"]
produces:["*/*"]
请求示例:
{"captcha": "","mobile": "15950552810","prefix": "86","token": ""}
请求参数:
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| request | request | body | true | LoginByMobileSendSmsCodeRequest | LoginByMobileSendSmsCodeRequest |
schema属性说明
LoginByMobileSendSmsCodeRequest
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| captcha | 图片验证码 | body | false | string | |
| mobile | 手机号 | body | true | string | |
| prefix | 手机号前缀 | body | false | string | |
| token | 图片验证码token | body | false | string |
响应示例:
响应参数:
暂无
响应状态:
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK | |
| 201 | Created | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Not Found |
登出
接口描述:
接口地址:/api/user/web/login/logout
请求方式:POST
consumes:["application/json"]
produces:["*/*"]
请求参数:
暂无
响应示例:
响应参数:
暂无
响应状态:
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK | |
| 201 | Created | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Not Found |
手机号 + 密码登录接口
接口描述:
接口地址:/api/user/web/login/mobile
请求方式:POST
consumes:["application/json"]
produces:["*/*"]
请求示例:
{"captcha": "","ip": "","isApp": true,"mobile": "15950552810","password": "","prefix": "86","token": ""}
请求参数:
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| request | request | body | true | LoginByMobileAndPasswordRequest | LoginByMobileAndPasswordRequest |
schema属性说明
LoginByMobileAndPasswordRequest
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| captcha | 图片验证码答案 | body | false | string | |
| ip | ip地址 | body | false | string | |
| isApp | 是否APP调用,false指代PC调用 | body | true | boolean | |
| mobile | 手机号 | body | true | string | |
| password | 密码 | body | true | string | |
| prefix | 手机号前缀 | body | false | string | |
| token | 图片验证码 token | body | false | string |
响应示例:
{"expireTime": 0,"extra": {},"tenantId": 0,"token": "","userId": 0}
响应参数:
| 参数名称 | 参数说明 | 类型 | schema |
|---|---|---|---|
| expireTime | 过期时长(秒) | integer(int32) | integer(int32) |
| extra | object | ||
| tenantId | integer(int32) | integer(int32) | |
| token | token的值 | string | |
| userId | 用户ID | integer(int64) | integer(int64) |
响应状态:
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK | TokenInfo |
| 201 | Created | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Not Found |
用户名 + 密码登录接口
接口描述:
接口地址:/api/user/web/login/username
请求方式:POST
consumes:["application/json"]
produces:["*/*"]
请求示例:
{"captcha": "","ip": "","isApp": true,"password": "","token": "","username": ""}
请求参数:
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| request | request | body | true | LoginByUsernameAndPasswordRequest | LoginByUsernameAndPasswordRequest |
schema属性说明
LoginByUsernameAndPasswordRequest
| 参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| captcha | 图片验证码答案 | body | false | string | |
| ip | ip地址 | body | false | string | |
| isApp | 是否APP调用,false指代PC调用 | body | true | boolean | |
| password | 密码 | body | true | string | |
| token | 图片验证码 token | body | false | string | |
| username | 用户名 | body | true | string |
响应示例:
{"expireTime": 0,"extra": {},"tenantId": 0,"token": "","userId": 0}
响应参数:
| 参数名称 | 参数说明 | 类型 | schema |
|---|---|---|---|
| expireTime | 过期时长(秒) | integer(int32) | integer(int32) |
| extra | object | ||
| tenantId | integer(int32) | integer(int32) | |
| token | token的值 | string | |
| userId | 用户ID | integer(int64) | integer(int64) |
响应状态:
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK | TokenInfo |
| 201 | Created | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Not Found |
