mirror of
https://gitee.com/bookshelfplus/bookshelfplus
synced 2025-10-02 22:15:15 +08:00
后端获取用户绑定第三方平台接口完成
This commit is contained in:
@@ -647,7 +647,7 @@ __可选__|string
|
|||||||
Third Party Controller
|
Third Party Controller
|
||||||
|
|
||||||
|
|
||||||
[[_qqusingget]]
|
[[_callbackusingget]]
|
||||||
==== 快捷登录回调函数
|
==== 快捷登录回调函数
|
||||||
....
|
....
|
||||||
GET /api/third-party/callback/{platform}
|
GET /api/third-party/callback/{platform}
|
||||||
@@ -655,7 +655,7 @@ GET /api/third-party/callback/{platform}
|
|||||||
|
|
||||||
|
|
||||||
===== 说明
|
===== 说明
|
||||||
传入 code 值,进行登录
|
如果传入 token 那么就是绑定第三方账号到当前登录账号,否则就是通过第三方授权登录
|
||||||
|
|
||||||
|
|
||||||
===== 参数
|
===== 参数
|
||||||
@@ -677,6 +677,8 @@ __可选__||string
|
|||||||
__可选__||string
|
__可选__||string
|
||||||
|**Query**|**state** +
|
|**Query**|**state** +
|
||||||
__可选__||string
|
__可选__||string
|
||||||
|
|**Query**|**token** +
|
||||||
|
__可选__|token|string
|
||||||
|===
|
|===
|
||||||
|
|
||||||
|
|
||||||
|
@@ -2246,7 +2246,7 @@ table.CodeRay td.code>pre{padding:0}
|
|||||||
<p>Third Party Controller</p>
|
<p>Third Party Controller</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="sect3">
|
<div class="sect3">
|
||||||
<h4 id="_qqusingget">2.4.1. 快捷登录回调函数</h4>
|
<h4 id="_callbackusingget">2.4.1. 快捷登录回调函数</h4>
|
||||||
<div class="literalblock">
|
<div class="literalblock">
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<pre>GET /api/third-party/callback/{platform}</pre>
|
<pre>GET /api/third-party/callback/{platform}</pre>
|
||||||
@@ -2255,7 +2255,7 @@ table.CodeRay td.code>pre{padding:0}
|
|||||||
<div class="sect4">
|
<div class="sect4">
|
||||||
<h5 id="_说明_10">说明</h5>
|
<h5 id="_说明_10">说明</h5>
|
||||||
<div class="paragraph">
|
<div class="paragraph">
|
||||||
<p>传入 code 值,进行登录</p>
|
<p>如果传入 token 那么就是绑定第三方账号到当前登录账号,否则就是通过第三方授权登录</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="sect4">
|
<div class="sect4">
|
||||||
@@ -2369,6 +2369,21 @@ table.CodeRay td.code>pre{padding:0}
|
|||||||
<p>string</p>
|
<p>string</p>
|
||||||
</div></div></td>
|
</div></div></td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p><strong>Query</strong></p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p><strong>token</strong><br>
|
||||||
|
<em>可选</em></p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p>token</p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p>string</p>
|
||||||
|
</div></div></td>
|
||||||
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
@@ -2969,7 +2984,7 @@ table.CodeRay td.code>pre{padding:0}
|
|||||||
</div>
|
</div>
|
||||||
<div id="footer">
|
<div id="footer">
|
||||||
<div id="footer-text">
|
<div id="footer-text">
|
||||||
Last updated 2022-04-04 14:35:07 SGT
|
Last updated 2022-04-04 21:35:33 SGT
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
@@ -8,7 +8,6 @@ import me.zhyd.oauth.model.AuthCallback;
|
|||||||
import me.zhyd.oauth.model.AuthResponse;
|
import me.zhyd.oauth.model.AuthResponse;
|
||||||
import me.zhyd.oauth.request.*;
|
import me.zhyd.oauth.request.*;
|
||||||
import me.zhyd.oauth.utils.AuthStateUtils;
|
import me.zhyd.oauth.utils.AuthStateUtils;
|
||||||
import org.apache.tomcat.jni.User;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Controller;
|
import org.springframework.stereotype.Controller;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
@@ -17,15 +16,14 @@ import plus.bookshelf.Common.Error.BusinessException;
|
|||||||
import plus.bookshelf.Common.Response.CommonReturnType;
|
import plus.bookshelf.Common.Response.CommonReturnType;
|
||||||
import plus.bookshelf.Common.ThirdParty.ThirdPartyConfig;
|
import plus.bookshelf.Common.ThirdParty.ThirdPartyConfig;
|
||||||
import plus.bookshelf.Controller.VO.UserVO;
|
import plus.bookshelf.Controller.VO.UserVO;
|
||||||
import plus.bookshelf.Dao.DO.ThirdPartyUserAuthDO;
|
|
||||||
import plus.bookshelf.Dao.DO.ThirdPartyUserDO;
|
|
||||||
import plus.bookshelf.Dao.Mapper.ThirdPartyUserAuthDOMapper;
|
|
||||||
import plus.bookshelf.Dao.Mapper.ThirdPartyUserDOMapper;
|
|
||||||
import plus.bookshelf.Service.Impl.ThirdPartyUserServiceImpl;
|
import plus.bookshelf.Service.Impl.ThirdPartyUserServiceImpl;
|
||||||
|
import plus.bookshelf.Service.Model.ThirdPartyUserModel;
|
||||||
import plus.bookshelf.Service.Model.UserModel;
|
import plus.bookshelf.Service.Model.UserModel;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import java.util.Objects;
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
@Api(tags = "第三方登录")
|
@Api(tags = "第三方登录")
|
||||||
@Controller
|
@Controller
|
||||||
@@ -83,6 +81,18 @@ public class ThirdPartyController extends BaseController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ApiOperation(value = "获取用户已绑定的第三方平台", notes = "传入当前登录用户 token ,返回已绑定的第三方平台")
|
||||||
|
@RequestMapping(value = "getBindingStatus", method = {RequestMethod.GET})
|
||||||
|
@ResponseBody
|
||||||
|
public CommonReturnType getBindingStatus(@RequestParam(value = "token", required = false) String token) throws BusinessException, InvocationTargetException, IllegalAccessException {
|
||||||
|
List<ThirdPartyUserModel> bindingStatus = thirdPartyUserService.getBindingStatus(token);
|
||||||
|
List<String> bindingPlatformList = new ArrayList<>();
|
||||||
|
for (ThirdPartyUserModel thirdPartyUserModel : bindingStatus) {
|
||||||
|
bindingPlatformList.add(thirdPartyUserModel.getSource());
|
||||||
|
}
|
||||||
|
return CommonReturnType.create(bindingPlatformList);
|
||||||
|
}
|
||||||
|
|
||||||
// 创建授权request
|
// 创建授权request
|
||||||
private AuthRequest getAuthRequest(String platform) throws BusinessException {
|
private AuthRequest getAuthRequest(String platform) throws BusinessException {
|
||||||
switch (platform.toLowerCase()) {
|
switch (platform.toLowerCase()) {
|
||||||
|
@@ -67,4 +67,11 @@ public interface ThirdPartyUserDOMapper {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
Integer getLastInsertId();
|
Integer getLastInsertId();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取用户登录的所有第三方平台信息
|
||||||
|
* @param userId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
ThirdPartyUserDO[] getUserBindThirdParties(Integer userId);
|
||||||
}
|
}
|
@@ -4,6 +4,7 @@ import me.zhyd.oauth.enums.AuthUserGender;
|
|||||||
import me.zhyd.oauth.model.AuthResponse;
|
import me.zhyd.oauth.model.AuthResponse;
|
||||||
import me.zhyd.oauth.model.AuthToken;
|
import me.zhyd.oauth.model.AuthToken;
|
||||||
import me.zhyd.oauth.model.AuthUser;
|
import me.zhyd.oauth.model.AuthUser;
|
||||||
|
import org.springframework.beans.BeanUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.data.redis.core.RedisTemplate;
|
import org.springframework.data.redis.core.RedisTemplate;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@@ -14,9 +15,14 @@ import plus.bookshelf.Dao.DO.ThirdPartyUserAuthDO;
|
|||||||
import plus.bookshelf.Dao.DO.ThirdPartyUserDO;
|
import plus.bookshelf.Dao.DO.ThirdPartyUserDO;
|
||||||
import plus.bookshelf.Dao.Mapper.ThirdPartyUserAuthDOMapper;
|
import plus.bookshelf.Dao.Mapper.ThirdPartyUserAuthDOMapper;
|
||||||
import plus.bookshelf.Dao.Mapper.ThirdPartyUserDOMapper;
|
import plus.bookshelf.Dao.Mapper.ThirdPartyUserDOMapper;
|
||||||
|
import plus.bookshelf.Service.Model.ThirdPartyUserModel;
|
||||||
import plus.bookshelf.Service.Model.UserModel;
|
import plus.bookshelf.Service.Model.UserModel;
|
||||||
import plus.bookshelf.Service.Service.ThirdPartyUserService;
|
import plus.bookshelf.Service.Service.ThirdPartyUserService;
|
||||||
|
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class ThirdPartyUserServiceImpl implements ThirdPartyUserService {
|
public class ThirdPartyUserServiceImpl implements ThirdPartyUserService {
|
||||||
|
|
||||||
@@ -90,6 +96,13 @@ public class ThirdPartyUserServiceImpl implements ThirdPartyUserService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 绑定第三方账号 回调函数
|
||||||
|
* @param authResponse
|
||||||
|
* @param token
|
||||||
|
* @return
|
||||||
|
* @throws BusinessException
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
@Transactional
|
@Transactional
|
||||||
public Boolean bindThirdPartAccountCallback(AuthResponse authResponse, String token) throws BusinessException {
|
public Boolean bindThirdPartAccountCallback(AuthResponse authResponse, String token) throws BusinessException {
|
||||||
@@ -154,6 +167,31 @@ public class ThirdPartyUserServiceImpl implements ThirdPartyUserService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取用户已绑定的第三方平台
|
||||||
|
* @param token
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
@Transactional
|
||||||
|
public List<ThirdPartyUserModel> getBindingStatus(String token) throws BusinessException, InvocationTargetException, IllegalAccessException {
|
||||||
|
// 函数中已判空,不需要再判断
|
||||||
|
UserModel userModel = userService.getUserByToken(redisTemplate, token);
|
||||||
|
ThirdPartyUserDO[] userBindThirdParties = thirdPartyUserDOMapper.getUserBindThirdParties(userModel.getId());
|
||||||
|
List<ThirdPartyUserModel> thirdPartyUserModelList = new ArrayList<>();
|
||||||
|
for (ThirdPartyUserDO thirdPartyUserDO : userBindThirdParties) {
|
||||||
|
ThirdPartyUserModel thirdPartyUserModel = convertThirdPartyUserDOToModel(thirdPartyUserDO);
|
||||||
|
thirdPartyUserModelList.add(thirdPartyUserModel);
|
||||||
|
}
|
||||||
|
return thirdPartyUserModelList;
|
||||||
|
}
|
||||||
|
|
||||||
|
private ThirdPartyUserModel convertThirdPartyUserDOToModel(ThirdPartyUserDO thirdPartyUserDO) throws InvocationTargetException, IllegalAccessException {
|
||||||
|
ThirdPartyUserModel thirdPartyUserModel = new ThirdPartyUserModel();
|
||||||
|
BeanUtils.copyProperties(thirdPartyUserDO, thirdPartyUserModel);
|
||||||
|
return thirdPartyUserModel;
|
||||||
|
}
|
||||||
|
|
||||||
private ThirdPartyUserDO getThirdPartyUserDOFromAuthData(Object authData) {
|
private ThirdPartyUserDO getThirdPartyUserDOFromAuthData(Object authData) {
|
||||||
AuthUser data = (AuthUser) authData;
|
AuthUser data = (AuthUser) authData;
|
||||||
String uuid = data.getUuid();
|
String uuid = data.getUuid();
|
||||||
|
@@ -3,8 +3,12 @@ package plus.bookshelf.Service.Service;
|
|||||||
import me.zhyd.oauth.model.AuthResponse;
|
import me.zhyd.oauth.model.AuthResponse;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import plus.bookshelf.Common.Error.BusinessException;
|
import plus.bookshelf.Common.Error.BusinessException;
|
||||||
|
import plus.bookshelf.Service.Model.ThirdPartyUserModel;
|
||||||
import plus.bookshelf.Service.Model.UserModel;
|
import plus.bookshelf.Service.Model.UserModel;
|
||||||
|
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public interface ThirdPartyUserService {
|
public interface ThirdPartyUserService {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -25,4 +29,11 @@ public interface ThirdPartyUserService {
|
|||||||
*/
|
*/
|
||||||
@Transactional
|
@Transactional
|
||||||
Boolean bindThirdPartAccountCallback(AuthResponse authResponse, String token) throws BusinessException;
|
Boolean bindThirdPartAccountCallback(AuthResponse authResponse, String token) throws BusinessException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取用户登录的所有第三方平台信息
|
||||||
|
* @param token
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<ThirdPartyUserModel> getBindingStatus(String token) throws BusinessException, InvocationTargetException, IllegalAccessException;
|
||||||
}
|
}
|
||||||
|
@@ -286,4 +286,8 @@
|
|||||||
<select id="getLastInsertId" resultType="java.lang.Integer">
|
<select id="getLastInsertId" resultType="java.lang.Integer">
|
||||||
SELECT LAST_INSERT_ID();
|
SELECT LAST_INSERT_ID();
|
||||||
</select>
|
</select>
|
||||||
|
<select id="getUserBindThirdParties" parameterType="java.lang.Integer" resultMap="BaseResultMap">
|
||||||
|
select <include refid="Base_Column_List" /> from third_party_user_info
|
||||||
|
where id in (select third_party_user_id from third_party_user_auth_relation where user_id = #{userId,jdbcType=INTEGER})
|
||||||
|
</select>
|
||||||
</mapper>
|
</mapper>
|
Reference in New Issue
Block a user