谷粒商城认证服务(三十四)

220、商城业务-认证服务-OAuth2.0简介-224、商城业务-认证服务-社交登录测试成功

之前博客也写过Oauth2的,不过没有和新浪qq等做整合,具体的也可以看https://www.cnblogs.com/dalianpai/p/12423982.html.

首先要跟着视频开通我的应用,然后看对应的API,反正也比较简单。是Oauth2的授权码模式,很完善。

具体的流程图:

下面就是简单的代码整合:

         <ul>
                <li>
                    <a href="https://api.weibo.com/oauth2/authorize?client_id=31031789&response_type=code&redirect_uri=http://auth.gulimall.com/oauth2.0/weibo/success">
                        <img style="width: 50px;height: 18px" src="/static/login/JD_img/weibo.png"/>
                    </a>
                </li>
                <li class="f4"> |</li>
                <li>
                    <a href="/static/login/">
                        <img src="/static/login/JD_img/weixin.png"/>
                        <span>微信</span>
                    </a>
                </li>
            </ul>

具体的业务逻辑代码

 @GetMapping("/oauth2.0/weibo/success")
    public String weibo(@RequestParam("code") String code) throws Exception {
        System.out.println(code);
        Map<String, String> map = new HashMap<>();
        map.put("client_id","31031789");
        map.put("client_secret","38c9571dd37d99d7f3d6aab02a77d14d");
        map.put("grant_type","authorization_code");
        map.put("redirect_uri","http://auth.gulimall.com/oauth2.0/weibo/success");
        map.put("code",code);
        HttpResponse response = HttpUtils.doPost("https://api.weibo.com", "/oauth2/access_token", "post", new HashMap<>(), new HashMap<>(), map);
        System.out.println(response);
        //2.处理
        if(response.getStatusLine().getStatusCode()==200){
            String json = EntityUtils.toString(response.getEntity());
            SocialUser socialUser = JSON.parseObject(json, SocialUser.class);

            R oauthLogin = memberFeignService.oauthLogin(socialUser);
            if(oauthLogin.getCode() == 0){
                MemberRespVo data = oauthLogin.getData("data", new TypeReference<MemberRespVo>() {
                });
                System.out.println("登录成功"+data);
                return "redirect:http://gulimall.com";
            }else{
                return "redirect:http://auth.gulimall.com/login.html";
            }
        }else{
            return "redirect:http://auth.gulimall.com/login.html";
        }

    }

具体的实现:

   @Override
    public MemberEntity login(SocialUser socialUser) throws Exception {
        String uid = socialUser.getUid();
        MemberDao memberDao = this.baseMapper;
        MemberEntity memberEntity = memberDao.selectOne(new QueryWrapper<MemberEntity>().eq("social_uid", uid));
        if(memberEntity != null){
            MemberEntity update = new MemberEntity();
            update.setId(memberEntity.getId());
            update.setAccessToken(socialUser.getAccess_token());
            update.setExpiresIn(socialUser.getExpires_in());
            memberDao.updateById(update);

            memberEntity.setAccessToken(socialUser.getAccess_token());
            memberEntity.setExpiresIn(socialUser.getExpires_in());
            return memberEntity;
        }else{
            MemberEntity regist = new MemberEntity();
            try {
                Map<String, String> query = new HashMap<>();
                query.put("access_token",socialUser.getAccess_token());
                query.put("uid",uid);
                HttpResponse response = HttpUtils.doGet("https://api.weibo.com", "/2/users/show.json", "get", new HashMap<String, String>(), query);
                if(response.getStatusLine().getStatusCode() == 200) {
                    String json = EntityUtils.toString(response.getEntity());
                    JSONObject jsonObject = JSON.parseObject(json);
                    String name = jsonObject.getString("name");
                    String gender = jsonObject.getString("gender");
                    regist.setNickname(name);
                    regist.setGender("m".equals(gender) ? 1 : 0);
                }
            }catch (Exception e){
            }
                regist.setSocialUid(socialUser.getUid());
                regist.setAccessToken(socialUser.getAccess_token());
                regist.setExpiresIn(socialUser.getExpires_in());
                memberDao.insert(regist);
                return regist;
        }
    }

结果:

posted @ 2020-07-17 00:05  天宇轩-王  阅读(399)  评论(0编辑  收藏  举报