首页 > 技术文章 > vue+h5 plus 第三方登录

fanqiuzhuji 2020-05-14 14:01 原文


html:

<div class="box" style="margin-top:0;" @click="getLogin('weixin')">微信登录</div>
<div class="box" style="margin-top:0;" @click="getLogin('qq')">QQ登录</div>
<div class="box" style="margin-top:0;" @click="getLogin('sinaweibo')">微博登录</div>

 




data:

oauth: null,
auths: !window.localStorage.getItem('auths') ? null : JSON.parse(window.localStorage.getItem('auths')),
Params: {}, // 第三方登录参数

 

 


 methods:
  
    //第三方登录
      getLogin(type) {
        this.oauth = type;
        plus.oauth.getServices(success => {
          this.auths = success
          window.localStorage.setItem('auths', JSON.stringify(success))
          this.$toast(`正在获取第三方登录...`);
          this.oauthLogin(type)
        }, error => {
          plus.nativeUI.alert("获取登录授权服务列表失败:" + JSON.stringify(error));
        })
      },
      // 获取登录认证
      oauthLogin(type) {
        console.log('======type' + type);
        var s;
        this.auths.forEach((item, index) => {
          if (this.auths[index].id == type) {
            s = this.auths[index]
          }
        })
        if (!s.authResult) {
          s.login(res => {
            // this.$toast('第一个微信登录')
            this.authUserInfo(type);
          }, error => {
            plus.nativeUI.alert('error' + JSON.stringify(error));
          })
        } else {
          this.authUserInfo(type);
          // this.$toast('第二个微信登录,已授权登录');
        }
      },
      // 获取授权用户信息
      authUserInfo(type) {
        var s;
        this.auths.forEach((item, index) => {
          if (this.auths[index].id == type) {
            s = this.auths[index]
          }
        })
        // console.log('===========s' + JSON.stringify(s));
        if (s.authResult) {
          s.getUserInfo(res => {
            this.Params = {
              username: s.userInfo.nickname,
              avatar: s.userInfo.headimgurl,
              sex: s.userInfo.sex,
              openid: s.userInfo.openid,
              longitude: this.longitude,
              latitude: this.latitude,
              type: 2
            }
       this.register(s.authResult.openid) console.log(
this.Params) }, error => { plus.nativeUI.alert(JSON.stringify(error)); this.$toast('失败报错'); }) } },
   //第三方登录
      register(openid){
        let sign;//标记

        if(this.oauth == 'weixin'){
          sign = 2;
        }
        if(this.oauth == 'sinaweibo'){
          sign = 3;
        }
        if(this.oauth == 'qq'){
          sign = 4;
        }
        let params = {
          type:sign,//1手机 2微信 3微博 4qq
          wx_openid:sign == 2?openid:'',
          wb_openid:sign == 3?openid:'',
          qq_openid:sign == 4?openid:'',
        }
        this.$post("/user/user/register", params).then(res => {
            if (!res.error_code) {
                console.log(res.response_data,'res')
                localStorage.setItem('access_token',res.response_data.access_token);
                this.getUserInfo()
            } else {
                this.$toast(res.error_msg);
                console.log(res.error_msg,'error')
            }
        })
      },
 

 


推荐阅读