哈尔滨 發表於 2021-4-24 11:35:00

uni-app 微信小程序授权登录

<h4 class="md-end-block md-heading md-focus"><span class="md-plain md-expand">1.微信小程序 获取用户信息 与获取手机号</span></h4>
<p class="md-end-block md-p"><span class="md-plain">详细信息看官方公告:<span class="md-link md-pair-s">https://developers.weixin.qq.com/community/develop/doc/000cacfa20ce88df04cb468bc52801</span></span></p>
<p class="md-end-block md-p"><strong><span class="md-plain">回收uni.getUserInfo接口可获取用户授权(返回的全部是匿名数据)</span></strong></p>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">4月28日24时后发布的新版本小程序,开发者调用wx.getUserInfo或<span class="md-tag md-raw-inline">&lt;button open-type="getUserInfo"/&gt;<span class="md-plain">将不再弹出弹窗,直接返回匿名的用户个人信息,获取加密后的openID、unionID数据的能力不做调整。</span></span></span></span></p>
<p class="md-end-block md-p"><strong><span class="md-plain">采用uni.getUserProfile 来授权返回微信用户信息</span></strong></p>
<p class="md-end-block md-p"><span class="md-plain">具体变化如下表: </span></p>
<p class="md-end-block md-p"><span class="md-plain"><img src="https://img2020.cnblogs.com/blog/2237618/202104/2237618-20210424113234644-1945619050.png" alt="" loading="lazy"></span></p>
<p class="md-end-block md-p">&nbsp;</p>
<h4 class="md-end-block md-heading md-focus"><span class="md-plain">2.uni.getUserInfo 接口调用方式</span></h4>
<p class="md-end-block md-p"><span class="md-plain">起初通过button 来获取用户信息, 设置 open-type="getUserInfo" </span></p>
<div class="cnblogs_code">
<pre>&lt;buttonopen-type="getUserInfo" @getuserinfo="getUserInfo"&gt;微信授权登录(open-type 获取)&lt;/button&gt;
<span style="color: rgba(0, 0, 0, 1)">
js部分
getUserInfo(e) {
    </span><span style="color: rgba(0, 0, 255, 1)">if</span> (e.detail.errMsg == 'getUserInfo:ok'<span style="color: rgba(0, 0, 0, 1)">) {
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">对数据进行操作</span>
<span style="color: rgba(0, 0, 0, 1)">            console.log(e)
    } </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
      </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.$operate.toast({
                title: </span>'授权失败无法登录!'<span style="color: rgba(0, 0, 0, 1)">
            })
      }
},</span></pre>
</div>
<p>或者 直接调用 uni.getUserInfo 来获取信息 在当前微信更新接口后,这2个接口将直接返回匿名用户数据,不在弹窗提示</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">js 部分 通过 @tap="userInfo" 调用</span>
<span style="color: rgba(0, 0, 0, 1)">userInfo() {
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">获取code</span>
<span style="color: rgba(0, 0, 0, 1)">    uni.login({
      provider: </span>'weixin'<span style="color: rgba(0, 0, 0, 1)">,
      success(login) {
            console.log(login);
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">获取用户信息</span>
<span style="color: rgba(0, 0, 0, 1)">            uni.getUserInfo({
                  provider: </span>'weixin'<span style="color: rgba(0, 0, 0, 1)">,
                  lang: </span>'zh_CN'<span style="color: rgba(0, 0, 0, 1)">,
                  success(user) {
                        console.log(user);
                }
            })
      }
    })
}</span></pre>
</div>
<h4 class="md-end-block md-heading md-focus"><span class="md-plain">3.采用uni.getUserProfile 获取信息 </span></h4>
<p class="md-end-block md-p"><span class="md-plain">不通过open-type 调用 而是使用 @tap=“goLogin” 或 bindtap="goLogin"调用的</span></p>
<div class="cnblogs_code">
<pre>&lt;button@tap="goLogin"&gt;微信uni.getUserProfile 登录&lt;/button&gt;

<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">js</span>
<span style="color: rgba(0, 0, 0, 1)">goLogin() {
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 获取code 小程序专有,用户登录凭证。</span>
<span style="color: rgba(0, 0, 0, 1)">      uni.login({
            provider: </span>'weixin'<span style="color: rgba(0, 0, 0, 1)">,
            success(login) {
                console.log(login);
            }
      })
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> desc: '用于完善会员资料'必填 声明获取用户个人信息后的用途,后续会展示在弹窗中</span>
<span style="color: rgba(0, 0, 0, 1)">      uni.getUserProfile({
            desc: </span>'用于完善会员资料'<span style="color: rgba(0, 0, 0, 1)">,
            lang: </span>'zh_CN'<span style="color: rgba(0, 0, 0, 1)">,
            success(user) {
                console.log(user);
            }
      })
},</span></pre>
</div>
<h4 class="md-end-block md-heading md-focus"><span class="md-plain">4.获取手机号 登录</span></h4>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">获取手机号 ,只能通过 button 按钮点击来获取 信息 ,传给后台解析数据</span></span></p>
<div class="cnblogs_code">
<pre>&lt;button open-type="getPhoneNumber" @getphonenumber="getUserPhone"&gt;微信手机号登录&lt;/button&gt;
<span style="color: rgba(0, 0, 0, 1)">
js部分
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">获取用户手机号</span>
<span style="color: rgba(0, 0, 0, 1)">getUserPhone(e) {
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 获取code 小程序专有,用户登录凭证。</span>
<span style="color: rgba(0, 0, 0, 1)">    uni.login({
            provider: </span>'weixin'<span style="color: rgba(0, 0, 0, 1)">,
            success(login) {
                console.log(login);
            }
    })   
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">手机号加密数据</span>
    <span style="color: rgba(0, 0, 255, 1)">if</span> (e.detail.errMsg == 'getPhoneNumber:ok'<span style="color: rgba(0, 0, 0, 1)">) {
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 获取 encryptedData 与 iv 传给后台进行解析</span>
<span style="color: rgba(0, 0, 0, 1)">      console.log(e)
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">传给后端的参数</span>
      let data =<span style="color: rgba(0, 0, 0, 1)"> {
                session_key: </span>'后端返回微信 openid '<span style="color: rgba(0, 0, 0, 1)">,
                encryptedData: e.detail.encryptedData,
                iv: e.detail.iv,
      }
    } </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
      </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.$operate.toast({
            title: </span>'授权失败无法登录!'<span style="color: rgba(0, 0, 0, 1)">
      })
    }
}</span></pre>
</div>
<p class="md-end-block md-p md-focus"><span class="md-plain">在解析 加密信息时,需先通过 uni.login获取code并上传给后台,用来获取微信 openid </span></p>
<h4 class="md-end-block md-heading"><span class="md-plain">4.验证码倒计时登录</span></h4>
<p class="md-end-block md-p"><span class="md-plain">项目有时会用到验证码倒计时,增加一个小玩意,有需要自取</span></p>
<p class="md-end-block md-p">css&nbsp;样式采用&nbsp;ColorUI-UniApp</p>
<p class="md-end-block md-p"><img src="https://img2020.cnblogs.com/blog/2237618/202104/2237618-20210424113456095-1418596949.png" alt="" loading="lazy"></p>
<p class="md-end-block md-p"><span class="md-plain md-expand">案例地址:<span class="md-link md-pair-s md-expand">https://gitee.com/jielov/uni-app-tabbar/blob/master/pages/wx_login/wx_login.vue</span></span></p>

</div>
<div id="MySignature" role="contentinfo">
    <p>本文来自博客园,作者:虚乄,转载请注明原文链接:https://www.cnblogs.com/lovejielive/p/14696528.html</p><br><br>
来源:https://www.cnblogs.com/lovejielive/p/14696528.html
頁: [1]
查看完整版本: uni-app 微信小程序授权登录