抖音小程序授权登录

一、授权登录流程

抖音小程序的授权登录与微信授权登录比较类似,都是通过授权码去获取用户的openId等信息

二、前端代码实现

              uni.login({
                provider: 'toutiao',
                success: function (loginRes) {
                  console.log("loginRes", loginRes);
                  console.log("授权码",loginRes.code)
                  uni.request({
                    url: common.api_base_url + '/dyMiniLogin?code=' + loginRes.code,
                    method: 'GET',
                    success: async res => {
                      var _data = res.data.data;
                      if (res.data.code == 200) {
                        that.$u.vuex('vuex_user', _data)
                        uni.setStorageSync('token', _data.token)
                        console.log("登录成功")
                      } else {

                      }
                      that.loginShow = false
                    },
                    fail(err){
                      that.getUserAuth();
                      console.log("getUserInfo fail = ", err)

                    }
                  });
                }
              });

三、后端代码实现

controller层

    /**
     * 抖音小程序登录
     * @param code
     * @param request
     * @return
     */
    @GetMapping("/dyMiniLogin")
    public AjaxResult dyMiniLogin(@RequestParam("code") String code, HttpServletRequest request) {
        String ipAddr = IpUtils.getIpAddr(request);
        LoginUser loginUser = loginService.dyMiniLogin(code, ipAddr);
        log.info("抖音用户登录成功,用户ID为:{},用户名称:{}",loginUser.getUserId(),loginUser.getUsername());
        return AjaxResult.success(loginUser);
    }

service层,直接通过OKHttpClient的方式去调用获取信息

    /**
     * 抖音小程序登录
     * @param code
     * @param ipAddr
     * @return
     */
    public LoginUser dyMiniLogin(String code, String ipAddr) {
        if (StringUtils.isEmpty(code)) {
            System.out.println(code);
            throw new BaseException("code 不能为空");
        }

        OkHttpClient client = new OkHttpClient.Builder()
                .connectTimeout(100, TimeUnit.SECONDS) // 设置连接超时时间为 100 秒
                .readTimeout(200, TimeUnit.SECONDS)  // 设置读取超时时间为 200 秒
                .build();
        // 构建请求体,包含 appid 和 code 参数
        MediaType mediaType = MediaType.parse("application/json");
        DouYinLoginRequestParam douYinLoginRequestParam = new DouYinLoginRequestParam();
        douYinLoginRequestParam.setAppid("");//抖音小程序appId
        douYinLoginRequestParam.setSecret("");//抖音小程序appSecret
        douYinLoginRequestParam.setCode(code);
        douYinLoginRequestParam.setAnonymous_code("");
        RequestBody body = RequestBody.create(mediaType, JSON.toJSONString(douYinLoginRequestParam));
        Request request = new Request.Builder()
                .url("https://developer.toutiao.com/api/apps/v2/jscode2session")
                .post(body)
                .addHeader("Content-Type", "application/json")
                .build();
        DouYinLoginResponse douYinLoginResponse = new DouYinLoginResponse();
        try {
            Response response = client.newCall(request).execute();
            if (response.isSuccessful()) {
                // 请求成功,处理响应
                String responseData = response.body().string();
                System.out.println("抖音授权登录返回信息: " + responseData);
                JSONObject jsonObject = JSON.parseObject(responseData);
                douYinLoginResponse = JSON.parseObject(jsonObject.getString("data"), DouYinLoginResponse.class);

            } else {
                // 请求失败,处理失败信息
                System.out.println("抖音授权登录失败" + response);
            }
        } catch (IOException e) {
            log.error("抖音授权登录失败[{}]",e.getMessage());
            throw new BaseException("登录失败,请联系管理员");
        }

        //这里拿到openId之后做后续处理。数据库存在则登录,不存在则注册
        LoginUser loginUser = miniUserRegister(douYinLoginResponse.getOpenid(), 33, ipAddr);

        return loginUser;
    }

流程总结:抖音小程序授权登录与微信小程序授权登录类似,都是通过授权码code去获取用户的openId等信息。

项目体验(抖音扫码):

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值