zoukankan      html  css  js  c++  java
  • 谷粒商城认证服务(三十四)

    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=" 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;
            }
        }
    

    结果:

  • 相关阅读:
    拖拽 上传文件
    复制文本消息
    zTree 显示为‘aa’,当选择aa时,传的参数为‘22’
    移动端 动画 启动硬件加速
    jquery 停止动画与切换
    CSS小技巧-怎样让每行多余的文字显示文省略号?
    CSS小技巧-两个盒子之间的间距问题
    CSS小技巧-为内盒子添加margin-top时,会带着父盒子一起下来,如何解决?
    小K的H5之旅-CSS基础(一)
    小K的H5之旅-HTML的基本结构与基本标签
  • 原文地址:https://www.cnblogs.com/dalianpai/p/13326607.html
Copyright © 2011-2022 走看看