小程序授權(quán)登陸

首先說(shuō)一下項(xiàng)目登陸過(guò)程的流程:

1.用戶第一次進(jìn)小程序耸彪,即之前沒(méi)有授權(quán)過(guò)。首先就彈出授權(quán)登陸頁(yè)面忘苛。用戶點(diǎn)擊同意后蝉娜,跳到首頁(yè),如果用戶點(diǎn)擊拒絕扎唾,則再次引導(dǎo)用戶同意授權(quán)召川。

2.用戶之前授權(quán)登陸過(guò),直接進(jìn)入小程序首頁(yè)胸遇。

login.wxml

<view wx:if="{{canIUse}}">
    <view class='header'>
        <image src='/images/arise.png'></image>
    </view>
 
    <view class='content'>
        <view>申請(qǐng)獲取以下權(quán)限</view>
        <text>獲得你的公開(kāi)信息(昵稱荧呐,頭像等)</text>
    </view>
 
    <button class='bottom' type='primary' open-type="getUserInfo" lang="zh_CN" bindgetuserinfo="bindGetUserInfo">
        授權(quán)登錄
    </button>
</view>
 
<view wx:else>請(qǐng)升級(jí)微信版本</view>

必須要使用<botton open-type='getUserInfo'></button>引導(dǎo)用戶授權(quán)。同時(shí)在button上綁定事件bindgetuserinfo纸镊。
頁(yè)面上面的wx:if和wx:else倍阐,我相信這個(gè)大家都明白的,就是小程序的條件式渲染逗威。

app.js

//app.js
App({
  globalData: {
    userInfo: null,
    url: 'https://mop.licltech.cn/crest',
    code: ''
  },
  onLaunch: function () {
    // 展示本地存儲(chǔ)能力
    var logs = wx.getStorageSync('logs') || []
    logs.unshift(Date.now())
    wx.setStorageSync('logs', logs)
 
    // 登錄
    wx.login({
      success: res => {
        this.globalData.code = res.code;
      }
    })
  },
 
  addListener: function (callback) {
    this.callback = callback;
  },
  setChangedData: function (data) {
    this.data = data;
    if (this.callback != null) {
      this.callback(data);
    }
  }
})

在小程序的app.js里面峰搪,有一個(gè)onlaunch方法,當(dāng)用戶進(jìn)入小程序的時(shí)候凯旭,就會(huì)調(diào)用一次這個(gè)方法概耻,里面的wx.login接口,這是小程序官方提供的登錄接口罐呼,會(huì)生成一個(gè)code鞠柄,即登錄憑證,這個(gè)是我們與用戶建立聯(lián)系的銜接弄贿。我們把這個(gè)code存起來(lái)春锋,存到globalData里面,方便我們?cè)诘卿涰?yè)面的邏輯里使用差凹。

下面我們看看login.js邏輯層期奔。

var app = getApp()
Page({
  data: {
    //判斷小程序的API,回調(diào)危尿,參數(shù)呐萌,組件等是否在當(dāng)前版本可用。
    canIUse: wx.canIUse('button.open-type.getUserInfo'),
    inviterId: "",
  },
 
  /**
   * 生命周期函數(shù)--監(jiān)聽(tīng)頁(yè)面加載
   */
  onLoad: function(options) {
    var inviterId = options.inviterId
    if (inviterId == undefined) {
      inviterId = ''
    }
    this.setData({
      inviterId: inviterId
    })
 
    //授權(quán)
    var that = this;
    // 獲取存儲(chǔ)的unionid
    var unionid = wx.getStorageSync('unionid')
           if (unionid) {
           // 根據(jù)unionid獲取信息
      wx.request({
        url: app.globalData.url + '/wechat/woLogin',
        method: 'get',
        data: {
          unionId: unionid
        },
        success: function(res) {
          if (res.data.return_code == '000000') {
            // 把用戶信息存到app.js中
            app.globalData.userInfo = res.data.return_data.member
 
            wx.switchTab({
              url: '/pages/index/index',
            })
          }
        }
      })
    }
  },
 
 
 
  // 授權(quán)點(diǎn)擊按鈕的方法
  bindGetUserInfo: function() {
    var that = this;
    wx.getSetting({
      success: res => {
        console.log(res)
        if (res.authSetting['scope.userInfo']) {
 
          // 已經(jīng)授權(quán)谊娇,可以直接調(diào)用 getUserInfo 獲取頭像昵稱肺孤,不會(huì)彈框
          wx.getUserInfo({
            success: res => {
              var encryptedData = res.encryptedData;
              var iv = res.iv
              wx.request({
                url: app.globalData.url + '/wechat/woAuth',
                data: {
                  code: app.globalData.code,
                  encryptedData: encryptedData,
                  iv: iv
                },
                dataType: 'json',
                success(res) {
                  app.globalData.userInfo = res.data.return_data.member
                  var unionId = res.data.return_data.unionId
                  var cookie = res.header["Set-Cookie"]
                  var memberId = res.data.return_data.member.memberId
                  that.setData({
                    memberId: memberId,
                  })
                  that.setData({
                    cookie: cookie,
                    unionId: unionId
                  });
                  // 存儲(chǔ)unionid
                  wx.setStorageSync('unionid', unionId)
                  wx.setStorageSync('cookie', cookie);
                  if (that.data.inviterId) {
                    wx.navigateTo({
                      url: '/pages/applyMember/applyMember?inviterId=' + that.data.inviterId,
                    })
                  } else {
                    wx.switchTab({
                      url: '/pages/index/index',
                    })
                  }
 
                }
              })
              // 由于 getUserInfo 是網(wǎng)絡(luò)請(qǐng)求,可能會(huì)在 Page.onLoad 之后才返回
              // 所以此處加入 callback 以防止這種情況
              if (that.userInfoReadyCallback) {
                that.userInfoReadyCallback(res)
              }
 
 
            }
          })
        } else {
          //用戶按了拒絕按鈕
          wx.showModal({
            title: '警告',
            content: '您點(diǎn)擊了拒絕授權(quán),將無(wú)法進(jìn)入小程序赠堵,請(qǐng)授權(quán)之后再進(jìn)入!!!',
            showCancel: false,
            confirmText: '返回授權(quán)',
            success: function(res) {
              if (res.confirm) {
                console.log('用戶點(diǎn)擊了“返回授權(quán)”')
              }
            }
          })
 
        }
      }
    })
  },
 
})

首先是判斷用戶之前是否有授權(quán)過(guò)小渊,如果授權(quán)過(guò)則直接進(jìn)入index頁(yè)面,這里判斷的憑證是unionid茫叭,

// 獲取存儲(chǔ)的unionid

var unionid = wx.getStorageSync('unionid')

如果獲取到了酬屉,則通過(guò)后臺(tái)提供的接口,換取用戶的信息揍愁,注意這個(gè)用戶信息是用戶在這個(gè)小程序平臺(tái)的信息呐萨,與wx.getUserInfo()獲取的用戶信息不一樣,然后把這個(gè)用戶信息存到app.globalData.userInfo里面莽囤。

app.globalData.userInfo = res.data.return_data.member谬擦。

我們?cè)谟脩舻谝淮芜M(jìn)入小程序時(shí),把這個(gè)unionID存儲(chǔ)起來(lái)朽缎,如果獲取到了惨远,則用戶之前授權(quán)過(guò),如果沒(méi)有饵沧,則之前沒(méi)有授權(quán)過(guò)锨络。

用戶之前未授權(quán)過(guò):
用戶點(diǎn)擊button,彈出授權(quán)框狼牺,我們根據(jù)wx.getSetting()接口判斷用戶是點(diǎn)擊的同意羡儿,還是拒絕,這個(gè)接口返回的數(shù)據(jù)展示給你們看一下:


20181020111448473.png

res.authSetting['scope.userInfo']==true是钥,則用戶點(diǎn)擊同意掠归,否則為拒絕。

用戶點(diǎn)擊同意后悄泥,我們就可以調(diào)用小程序接口

wx.getUserInfo()獲取用戶微信的信息虏冻,包括用戶的昵稱,頭像弹囚,性別厨相,城市等,還有iv,encryptedData鸥鹉。這里我們需要把a(bǔ)pp.js里獲取到的code蛮穿,和這個(gè)接口獲取到的iv,encryptedData通過(guò)后臺(tái)提供的接口傳給后臺(tái),以獲取unionID和用戶在這個(gè)小程序平臺(tái)的相關(guān)信息毁渗。

20181020113627241.png

獲取到數(shù)據(jù)之后

通過(guò)wx.setStorageSync('unionid', unionId)把unionID存儲(chǔ)起來(lái)

通過(guò)app.globalData.userInfo = res.data.return_data.member践磅。

然后跳轉(zhuǎn)到index首頁(yè)。

至此灸异,我們的登錄就寫完了府适。羔飞。。檐春。逻淌。
————————————————
版權(quán)聲明:本文為CSDN博主「曉鳳鳳」的原創(chuàng)文章
原文鏈接:https://blog.csdn.net/weixin_41726565/java/article/details/83210789

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市喇聊,隨后出現(xiàn)的幾起案子恍风,更是在濱河造成了極大的恐慌,老刑警劉巖誓篱,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異凯楔,居然都是意外死亡窜骄,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門摆屯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)邻遏,“玉大人,你說(shuō)我怎么就攤上這事虐骑∽佳椋” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵廷没,是天一觀的道長(zhǎng)糊饱。 經(jīng)常有香客問(wèn)我,道長(zhǎng)颠黎,這世上最難降的妖魔是什么另锋? 我笑而不...
    開(kāi)封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮狭归,結(jié)果婚禮上夭坪,老公的妹妹穿的比我還像新娘。我一直安慰自己过椎,他們只是感情好室梅,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著疚宇,像睡著了一般亡鼠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上灰嫉,一...
    開(kāi)封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天拆宛,我揣著相機(jī)與錄音,去河邊找鬼讼撒。 笑死浑厚,一個(gè)胖子當(dāng)著我的面吹牛股耽,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播钳幅,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼物蝙,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了敢艰?” 一聲冷哼從身側(cè)響起诬乞,我...
    開(kāi)封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎钠导,沒(méi)想到半個(gè)月后震嫉,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡牡属,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年票堵,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逮栅。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡悴势,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出措伐,到底是詐尸還是另有隱情特纤,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布侥加,位于F島的核電站捧存,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏官硝。R本人自食惡果不足惜矗蕊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望氢架。 院中可真熱鬧傻咖,春花似錦、人聲如沸岖研。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)孙援。三九已至害淤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拓售,已是汗流浹背窥摄。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留础淤,地道東北人崭放。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓哨苛,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親币砂。 傳聞我的和親對(duì)象是個(gè)殘疾皇子建峭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344