术语表
中文 | 英文 | 描述 |
---|---|---|
用户中心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: JWT
pc-expire-time: ${LOGIN_SESSION_EXPIRE_TIME:3600}
app-expire-time: ${LOGIN_APP_SESSION_EXPIRE_TIME:2592000}
token-storage-type: Cookie
cookie-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 依赖服务
@Autowired
private UcUserReadFacade userReadFacade;
@Autowired
private 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
系列注解,实现实现类的替换,示例如下:
@Configuration
public 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 {
...
@Autowired
private 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 {
@Override
protected 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
系列注解,实现实现类的替换,示例如下:
@Configuration
public 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 服务异常返回值结构
核心扩展点:
@ControllerAdvice
public abstract class BaseRestExceptionAdvice extends ResponseEntityExceptionHandler {
private final MessageSource messageSource;
private static final Locale DEFAULT_LOCALE = LocaleContextHolder.getLocale();
@Autowired
public 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);
}
}
扩展生效方式:
@Configuration
public class DracoWebCommonConfiguration {
...
@Bean
@ConditionalOnProperty(prefix = "draco.web", name = "enable-exception-wrapper", havingValue = "true")
public BaseRestExceptionAdvice restExceptionAdvice(MessageSource messageSource) {
return new BaseRestExceptionAdvice(messageSource) {
};
}
...
}
图片验证码生成器扩展点
设计目的:
有些项目可能需要对图片验证码的生成逻辑做扩展,这里需要对生成器的实现逻辑预埋扩展点,方便上次应用扩展
核心扩展点:
通过设计核心接口,实现扩展点的预埋
扩展生效方式:
通过 @Bean
注解 & @Conditional
系列注解,实现实现类的替换,示例如下:
@Configuration
public 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
*/
@EqualsAndHashCode
public 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;
}
@PostConstruct
protected void init() {
handlerSet.add(this);
}
@Override
public int compareTo(AbstractLoginBeforeHandler handler) {
return Integer.compare(this.getOrder(), handler.getOrder());
}
}
// 后置扩展点生效方式类同上述,故忽略
扩展生效方式:
通过 @Bean
注解 & @Conditional
系列注解,实现扩展实现类的注册,示例如下:
@Configuration
public 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
系列注解,实现扩展实现类的注册,示例如下:
@Configuration
public 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
系列注解,实现扩展实现类的注册,示例如下:
@Configuration
public 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 username
UcUser 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
系列注解,实现扩展实现类的注册,示例如下:
@Configuration
public 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 用户的能力。
核心扩展点:
@Configuration
public 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 |