Search in sources :

Example 1 with ThirdLoginModel

use of org.jeecg.modules.system.model.ThirdLoginModel in project jeecg-boot by jeecgboot.

the class ThirdAppDingtalkServiceImpl method oauth2Login.

/**
 * OAuth2登录,成功返回登录的SysUser,失败返回null
 */
public SysUser oauth2Login(String authCode) {
    ThirdAppTypeItemVo dtConfig = thirdAppConfig.getDingtalk();
    // 1. 根据免登授权码获取用户 AccessToken
    String userAccessToken = JdtOauth2API.getUserAccessToken(dtConfig.getClientId(), dtConfig.getClientSecret(), authCode);
    if (userAccessToken == null) {
        log.error("oauth2Login userAccessToken is null");
        return null;
    }
    // 2. 根据用户 AccessToken 获取当前用户的基本信息(不包括userId)
    ContactUser contactUser = JdtOauth2API.getContactUsers("me", userAccessToken);
    if (contactUser == null) {
        log.error("oauth2Login contactUser is null");
        return null;
    }
    String unionId = contactUser.getUnionId();
    // 3. 根据获取到的 unionId 换取用户 userId
    String accessToken = this.getAccessToken();
    if (accessToken == null) {
        log.error("oauth2Login accessToken is null");
        return null;
    }
    Response<String> getUserIdRes = JdtUserAPI.getUseridByUnionid(unionId, accessToken);
    if (!getUserIdRes.isSuccess()) {
        log.error("oauth2Login getUseridByUnionid failed: " + JSON.toJSONString(getUserIdRes));
        return null;
    }
    String appUserId = getUserIdRes.getResult();
    log.info("appUserId: " + appUserId);
    if (appUserId != null) {
        // 判断第三方用户表有没有这个人
        LambdaQueryWrapper<SysThirdAccount> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(SysThirdAccount::getThirdUserUuid, appUserId);
        queryWrapper.or().eq(SysThirdAccount::getThirdUserId, appUserId);
        queryWrapper.eq(SysThirdAccount::getThirdType, THIRD_TYPE);
        SysThirdAccount thirdAccount = sysThirdAccountService.getOne(queryWrapper);
        if (thirdAccount != null) {
            return this.getSysUserByThird(thirdAccount, null, appUserId, accessToken);
        } else {
            // 直接创建新账号
            User appUser = JdtUserAPI.getUserById(appUserId, accessToken).getResult();
            ThirdLoginModel tlm = new ThirdLoginModel(THIRD_TYPE, appUser.getUserid(), appUser.getName(), appUser.getAvatar());
            thirdAccount = sysThirdAccountService.saveThirdUser(tlm);
            return this.getSysUserByThird(thirdAccount, appUser, null, null);
        }
    }
    return null;
}
Also used : ContactUser(com.jeecg.dingtalk.api.oauth2.vo.ContactUser) ContactUser(com.jeecg.dingtalk.api.oauth2.vo.ContactUser) User(com.jeecg.dingtalk.api.user.vo.User) ThirdAppTypeItemVo(org.jeecg.config.thirdapp.ThirdAppTypeItemVo) ThirdLoginModel(org.jeecg.modules.system.model.ThirdLoginModel) LambdaQueryWrapper(com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper)

Example 2 with ThirdLoginModel

use of org.jeecg.modules.system.model.ThirdLoginModel in project kms by mahonelau.

the class ThirdLoginController method loginThird.

@RequestMapping("/{source}/callback")
public String loginThird(@PathVariable("source") String source, AuthCallback callback, ModelMap modelMap) {
    log.info("第三方登录进入callback:" + source + " params:" + JSONObject.toJSONString(callback));
    AuthRequest authRequest = factory.get(source);
    AuthResponse response = authRequest.login(callback);
    log.info(JSONObject.toJSONString(response));
    Result<JSONObject> result = new Result<JSONObject>();
    if (response.getCode() == 2000) {
        JSONObject data = JSONObject.parseObject(JSONObject.toJSONString(response.getData()));
        String username = data.getString("username");
        String avatar = data.getString("avatar");
        String uuid = data.getString("uuid");
        // 构造第三方登录信息存储对象
        ThirdLoginModel tlm = new ThirdLoginModel(source, uuid, username, avatar);
        // 判断有没有这个人
        // update-begin-author:wangshuai date:20201118 for:修改成查询第三方账户表
        LambdaQueryWrapper<SysThirdAccount> query = new LambdaQueryWrapper<SysThirdAccount>();
        query.eq(SysThirdAccount::getThirdUserUuid, uuid);
        query.eq(SysThirdAccount::getThirdType, source);
        List<SysThirdAccount> thridList = sysThirdAccountService.list(query);
        SysThirdAccount user = null;
        if (thridList == null || thridList.size() == 0) {
            // 否则直接创建新账号
            user = saveThirdUser(tlm);
        } else {
            // 已存在 只设置用户名 不设置头像
            user = thridList.get(0);
        }
        // update-begin-author:wangshuai date:20201118 for:从第三方登录查询是否存在用户id,不存在绑定手机号
        if (oConvertUtils.isNotEmpty(user.getSysUserId())) {
            String sysUserId = user.getSysUserId();
            SysUser sysUser = sysUserService.getById(sysUserId);
            String token = saveToken(sysUser);
            modelMap.addAttribute("token", token);
        } else {
            modelMap.addAttribute("token", "绑定手机号," + "" + uuid);
        }
    // update-end-author:wangshuai date:20201118 for:从第三方登录查询是否存在用户id,不存在绑定手机号
    // update-begin--Author:wangshuai  Date:20200729 for:接口在签名校验失败时返回失败的标识码 issues#1441--------------------
    } else {
        modelMap.addAttribute("token", "登录失败");
    }
    // update-end--Author:wangshuai  Date:20200729 for:接口在签名校验失败时返回失败的标识码 issues#1441--------------------
    result.setSuccess(false);
    result.setMessage("第三方登录异常,请联系管理员");
    return "thirdLogin";
}
Also used : AuthRequest(me.zhyd.oauth.request.AuthRequest) SysThirdAccount(org.jeecg.modules.system.entity.SysThirdAccount) JSONObject(com.alibaba.fastjson.JSONObject) SysUser(org.jeecg.modules.system.entity.SysUser) ThirdLoginModel(org.jeecg.modules.system.model.ThirdLoginModel) AuthResponse(me.zhyd.oauth.model.AuthResponse) Result(org.jeecg.common.api.vo.Result) LambdaQueryWrapper(com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper)

Example 3 with ThirdLoginModel

use of org.jeecg.modules.system.model.ThirdLoginModel in project kykms by mahonelau.

the class ThirdLoginController method loginThird.

@RequestMapping("/{source}/callback")
public String loginThird(@PathVariable("source") String source, AuthCallback callback, ModelMap modelMap) {
    log.info("第三方登录进入callback:" + source + " params:" + JSONObject.toJSONString(callback));
    AuthRequest authRequest = factory.get(source);
    AuthResponse response = authRequest.login(callback);
    log.info(JSONObject.toJSONString(response));
    Result<JSONObject> result = new Result<JSONObject>();
    if (response.getCode() == 2000) {
        JSONObject data = JSONObject.parseObject(JSONObject.toJSONString(response.getData()));
        String username = data.getString("username");
        String avatar = data.getString("avatar");
        String uuid = data.getString("uuid");
        // 构造第三方登录信息存储对象
        ThirdLoginModel tlm = new ThirdLoginModel(source, uuid, username, avatar);
        // 判断有没有这个人
        // update-begin-author:wangshuai date:20201118 for:修改成查询第三方账户表
        LambdaQueryWrapper<SysThirdAccount> query = new LambdaQueryWrapper<SysThirdAccount>();
        query.eq(SysThirdAccount::getThirdUserUuid, uuid);
        query.eq(SysThirdAccount::getThirdType, source);
        List<SysThirdAccount> thridList = sysThirdAccountService.list(query);
        SysThirdAccount user = null;
        if (thridList == null || thridList.size() == 0) {
            // 否则直接创建新账号
            user = saveThirdUser(tlm);
        } else {
            // 已存在 只设置用户名 不设置头像
            user = thridList.get(0);
        }
        // update-begin-author:wangshuai date:20201118 for:从第三方登录查询是否存在用户id,不存在绑定手机号
        if (oConvertUtils.isNotEmpty(user.getSysUserId())) {
            String sysUserId = user.getSysUserId();
            SysUser sysUser = sysUserService.getById(sysUserId);
            String token = saveToken(sysUser);
            modelMap.addAttribute("token", token);
        } else {
            modelMap.addAttribute("token", "绑定手机号," + "" + uuid);
        }
    // update-end-author:wangshuai date:20201118 for:从第三方登录查询是否存在用户id,不存在绑定手机号
    // update-begin--Author:wangshuai  Date:20200729 for:接口在签名校验失败时返回失败的标识码 issues#1441--------------------
    } else {
        modelMap.addAttribute("token", "登录失败");
    }
    // update-end--Author:wangshuai  Date:20200729 for:接口在签名校验失败时返回失败的标识码 issues#1441--------------------
    result.setSuccess(false);
    result.setMessage("第三方登录异常,请联系管理员");
    return "thirdLogin";
}
Also used : AuthRequest(me.zhyd.oauth.request.AuthRequest) SysThirdAccount(org.jeecg.modules.system.entity.SysThirdAccount) JSONObject(com.alibaba.fastjson.JSONObject) SysUser(org.jeecg.modules.system.entity.SysUser) ThirdLoginModel(org.jeecg.modules.system.model.ThirdLoginModel) AuthResponse(me.zhyd.oauth.model.AuthResponse) Result(org.jeecg.common.api.vo.Result) LambdaQueryWrapper(com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper)

Example 4 with ThirdLoginModel

use of org.jeecg.modules.system.model.ThirdLoginModel in project jeecg-boot by jeecgboot.

the class ThirdAppWechatEnterpriseServiceImpl method oauth2Login.

/**
 * OAuth2登录,成功返回登录的SysUser,失败返回null
 */
public SysUser oauth2Login(String code) {
    String accessToken = this.getAppAccessToken();
    if (accessToken == null) {
        return null;
    }
    String appUserId = this.getUserIdByThirdCode(code, accessToken);
    if (appUserId != null) {
        // 判断第三方用户表有没有这个人
        LambdaQueryWrapper<SysThirdAccount> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(SysThirdAccount::getThirdUserUuid, appUserId);
        queryWrapper.or().eq(SysThirdAccount::getThirdUserId, appUserId);
        queryWrapper.eq(SysThirdAccount::getThirdType, THIRD_TYPE);
        SysThirdAccount thirdAccount = sysThirdAccountService.getOne(queryWrapper);
        if (thirdAccount != null) {
            return this.getSysUserByThird(thirdAccount, null, appUserId, accessToken);
        } else {
            // 直接创建新账号
            User appUser = JwUserAPI.getUserByUserid(appUserId, accessToken);
            ThirdLoginModel tlm = new ThirdLoginModel(THIRD_TYPE, appUser.getUserid(), appUser.getName(), appUser.getAvatar());
            thirdAccount = sysThirdAccountService.saveThirdUser(tlm);
            return this.getSysUserByThird(thirdAccount, appUser, null, null);
        }
    }
    return null;
}
Also used : User(com.jeecg.qywx.api.user.vo.User) ThirdLoginModel(org.jeecg.modules.system.model.ThirdLoginModel) LambdaQueryWrapper(com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper)

Example 5 with ThirdLoginModel

use of org.jeecg.modules.system.model.ThirdLoginModel in project jeecg-boot by jeecgboot.

the class ThirdLoginController method loginThird.

@RequestMapping("/{source}/callback")
public String loginThird(@PathVariable("source") String source, AuthCallback callback, ModelMap modelMap) {
    log.info("第三方登录进入callback:" + source + " params:" + JSONObject.toJSONString(callback));
    AuthRequest authRequest = factory.get(source);
    AuthResponse response = authRequest.login(callback);
    log.info(JSONObject.toJSONString(response));
    Result<JSONObject> result = new Result<JSONObject>();
    if (response.getCode() == 2000) {
        JSONObject data = JSONObject.parseObject(JSONObject.toJSONString(response.getData()));
        String username = data.getString("username");
        String avatar = data.getString("avatar");
        String uuid = data.getString("uuid");
        // 构造第三方登录信息存储对象
        ThirdLoginModel tlm = new ThirdLoginModel(source, uuid, username, avatar);
        // 判断有没有这个人
        // update-begin-author:wangshuai date:20201118 for:修改成查询第三方账户表
        LambdaQueryWrapper<SysThirdAccount> query = new LambdaQueryWrapper<SysThirdAccount>();
        query.eq(SysThirdAccount::getThirdUserUuid, uuid);
        query.eq(SysThirdAccount::getThirdType, source);
        List<SysThirdAccount> thridList = sysThirdAccountService.list(query);
        SysThirdAccount user = null;
        if (thridList == null || thridList.size() == 0) {
            // 否则直接创建新账号
            user = sysThirdAccountService.saveThirdUser(tlm);
        } else {
            // 已存在 只设置用户名 不设置头像
            user = thridList.get(0);
        }
        // update-begin-author:wangshuai date:20201118 for:从第三方登录查询是否存在用户id,不存在绑定手机号
        if (oConvertUtils.isNotEmpty(user.getSysUserId())) {
            String sysUserId = user.getSysUserId();
            SysUser sysUser = sysUserService.getById(sysUserId);
            String token = saveToken(sysUser);
            modelMap.addAttribute("token", token);
        } else {
            modelMap.addAttribute("token", "绑定手机号," + "" + uuid);
        }
    // update-end-author:wangshuai date:20201118 for:从第三方登录查询是否存在用户id,不存在绑定手机号
    // update-begin--Author:wangshuai  Date:20200729 for:接口在签名校验失败时返回失败的标识码 issues#1441--------------------
    } else {
        modelMap.addAttribute("token", "登录失败");
    }
    // update-end--Author:wangshuai  Date:20200729 for:接口在签名校验失败时返回失败的标识码 issues#1441--------------------
    result.setSuccess(false);
    result.setMessage("第三方登录异常,请联系管理员");
    return "thirdLogin";
}
Also used : AuthRequest(me.zhyd.oauth.request.AuthRequest) SysThirdAccount(org.jeecg.modules.system.entity.SysThirdAccount) JSONObject(com.alibaba.fastjson.JSONObject) SysUser(org.jeecg.modules.system.entity.SysUser) ThirdLoginModel(org.jeecg.modules.system.model.ThirdLoginModel) AuthResponse(me.zhyd.oauth.model.AuthResponse) Result(org.jeecg.common.api.vo.Result) LambdaQueryWrapper(com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper)

Aggregations

LambdaQueryWrapper (com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper)5 ThirdLoginModel (org.jeecg.modules.system.model.ThirdLoginModel)5 JSONObject (com.alibaba.fastjson.JSONObject)3 AuthResponse (me.zhyd.oauth.model.AuthResponse)3 AuthRequest (me.zhyd.oauth.request.AuthRequest)3 Result (org.jeecg.common.api.vo.Result)3 SysThirdAccount (org.jeecg.modules.system.entity.SysThirdAccount)3 SysUser (org.jeecg.modules.system.entity.SysUser)3 ContactUser (com.jeecg.dingtalk.api.oauth2.vo.ContactUser)1 User (com.jeecg.dingtalk.api.user.vo.User)1 User (com.jeecg.qywx.api.user.vo.User)1 ThirdAppTypeItemVo (org.jeecg.config.thirdapp.ThirdAppTypeItemVo)1