成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

mpvue實(shí)現(xiàn)小程序登錄及授權(quán)獲取用戶信息

wangym / 1942人閱讀

摘要:首先要明白一件事,小程序中的登錄和授權(quán)其實(shí)是兩個(gè)操作。拿到之后,引導(dǎo)用戶觸發(fā)的組件,在回調(diào)事件中拿到以及,與一起傳給后臺(tái),后臺(tái)通過(guò)這些向微信服務(wù)器請(qǐng)求到和之后,自定義登錄態(tài)并將其與和關(guān)聯(lián)起來(lái)然后寫(xiě)。

首先要明白一件事,小程序中的登錄和授權(quán)其實(shí)是兩個(gè)操作。
登錄的意義就是讓web服務(wù)器知道當(dāng)前的用戶是誰(shuí),傳統(tǒng)的web應(yīng)用中用戶通過(guò)輸入賬號(hào)和密碼實(shí)現(xiàn)登錄,而小程序中對(duì)應(yīng)的是openId(當(dāng)前用戶對(duì)應(yīng)的唯一標(biāo)識(shí))。

每個(gè)用戶相對(duì)于每個(gè)微信應(yīng)用(公眾號(hào)或者小程序)的openId 是唯一的,也就是說(shuō)一個(gè)用戶相對(duì)于不同的微信應(yīng)用會(huì)存在不同的openId.

小程序中的授權(quán)分為很多種,使用攝像頭、錄音功能、用戶信息等等,大多數(shù)情況下通過(guò)官方提供給的wx.authorize()就可以獲取對(duì)應(yīng)的授權(quán)(彈出微信授權(quán)的對(duì)話框,用戶允許之后即可獲得),但今天要說(shuō)的用戶信息授權(quán),在小程序一系列改版之后,則需要通過(guò)其他方式獲得。

下面是前端代碼實(shí)現(xiàn)思路。

調(diào)用wx.login()方法獲取code(登錄憑證),然后發(fā)送給后臺(tái),后臺(tái)就可以通過(guò)code2Session向微信服務(wù)器請(qǐng)求到openidsession_key。

mounted (){
    wx.login({
        success (res) {
            if (res.code){
                // 這里可以把code傳給后臺(tái),后臺(tái)用此獲取openid及session_key
            }
        },
    })
}

只獲取到用戶的openid意義并不大,我們還需要用戶的昵稱、頭像等個(gè)人基本信息,獲取這些是需要用戶授權(quán)的。大多數(shù)情況下我們通過(guò)調(diào)用wx.authorize()就可以向用戶發(fā)起某種授權(quán)請(qǐng)求,也就是彈窗詢問(wèn)用戶是否同意授權(quán)小程序使用某項(xiàng)功能或獲取用戶的某些數(shù)據(jù)。

例如想調(diào)用設(shè)備的錄音功能:

wx.authorize({
    // 通過(guò)scope指明申請(qǐng)獲取哪種類型的權(quán)限
    scope: "scope.record",
    success() {
      // 用戶已經(jīng)同意小程序使用錄音功能,后續(xù)調(diào)用 wx.startRecord 接口不會(huì)彈窗詢問(wèn)
      wx.startRecord()
    }
})

會(huì)彈出以下彈窗
",也就是需要用戶手動(dòng)點(diǎn)擊open-type=getUserInfo

//script代碼

getUserInfoClick(){
    // console.log("click事件首先觸發(fā)")
},
bindGetUserInfo(e) {
    // console.log("回調(diào)事件后觸發(fā)")
    const self = this;
    if (e.mp.detail.userInfo){
        console.log("用戶按了允許授權(quán)按鈕")
        let { encryptedData,userInfo,iv } = e.mp.detail;
        self.$http.post(api,{
            // 這里的code就是通過(guò)wx.login()獲取的
            code:self.code,
            encryptedData,
            iv,
        }).then(res => {
            console.log(`后臺(tái)交互拿回?cái)?shù)據(jù):`,res);
            // 獲取到后臺(tái)重寫(xiě)的session數(shù)據(jù),可以通過(guò)vuex做本地保存
        }).catch(err => {
            console.log(`api請(qǐng)求出錯(cuò):`,err);
        })  
    } else {
        //用戶按了拒絕按鈕
        console.log("用戶按了拒絕按鈕");
    }
},

到這里就已經(jīng)獲取到用戶的基本信息了,可以再稍微優(yōu)化一下。雖然通過(guò)wx.getUserInfo()方法已經(jīng)不能彈出授權(quán)窗口,但授權(quán)狀態(tài)會(huì)保存在緩存中,只要授權(quán)過(guò)且沒(méi)過(guò)期,便可以通過(guò)此api的success回調(diào)直接獲取到用戶信息,否則進(jìn)入會(huì)進(jìn)入fail回調(diào),此時(shí)我們?cè)偬崾居脩酎c(diǎn)擊

// javascript代碼

mounted () {
    const self = this;
    wx.login({
        success (res) {
            if (res.code){
                self.code = res.code;
                self.wxGetUserInfo(res.code);
            }
        },
    })
},
methods: {
    wxGetUserInfo (code) {
        const self = this;
        wx.getUserInfo({
            withCredentials: true,
            success (res) {
                let { encryptedData,userInfo,iv } = res;
                self.$http.post("api",{
                    code,
                    encryptedData,
                    iv,
                }).then(res => {
                    console.log(`后臺(tái)交互拿回?cái)?shù)據(jù):`,res);
                    // 獲取到后臺(tái)重寫(xiě)的session數(shù)據(jù),可以通過(guò)vuex做本地保存
                }).catch(err => {
                    console.log(`自動(dòng)請(qǐng)求api失敗 err:`,err);
                })  
            },
            fail (err) {
                console.log("自動(dòng)wx.getUserInfo失敗:",err);
                // 顯示主動(dòng)授權(quán)的button
                self.buttonVisible = true;
            }
        })
    },
    bindGetUserInfo(e) {
        // console.log("回調(diào)事件后觸發(fā)")
        const self = this;
        if (e.mp.detail.userInfo){
            console.log("用戶按了允許授權(quán)按鈕")
            let { encryptedData,userInfo,iv } = e.mp.detail;
            self.$http.post(api,{
                // 這里的code就是通過(guò)wx.login()獲取的
                code:self.code,
                encryptedData,
                iv,
            }).then(res => {
                console.log(`后臺(tái)交互拿回?cái)?shù)據(jù):`,res);
                // 獲取到后臺(tái)重寫(xiě)的session數(shù)據(jù),可以通過(guò)vuex做本地保存
            }).catch(err => {
                console.log(`api請(qǐng)求出錯(cuò):`,err);
            })  
        } else {
            //用戶按了拒絕按鈕
            console.log("用戶按了拒絕按鈕");
        }
    },
}

到這里,就通過(guò)mpvue簡(jiǎn)單實(shí)現(xiàn)了小程序得登錄及獲取用戶信息授權(quán),總結(jié)一下:

首先要通過(guò)wx.login()獲取code,也就是登錄憑證。

拿到code之后,引導(dǎo)用戶觸發(fā)open-type="userinfo"的button組件,在回調(diào)事件中拿到encryptedData以及iv,與code一起傳給后臺(tái),后臺(tái)通過(guò)這些向微信服務(wù)器請(qǐng)求到openId和session_key之后,自定義登錄態(tài)并將其與openId 和session_key 關(guān)聯(lián)起來(lái)然后寫(xiě)session。

后臺(tái)將登錄態(tài)返回給前端,前端筒骨vuex或者wx.setStorageSync() 方式講session全局保存起來(lái)。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/100711.html

相關(guān)文章

  • mpvue開(kāi)發(fā)程序所遇問(wèn)題h5轉(zhuǎn)化方案

    摘要:騰訊地圖提供的只提供了經(jīng)緯度定位,而產(chǎn)品需要的是確認(rèn)定位后獲取城市,進(jìn)行同城商品檢索阿里云對(duì)象儲(chǔ)存處理文件上傳,比較意外的是騰訊對(duì)阿里云的域名前綴進(jìn)行了封禁后臺(tái)不能配置,解決方案是讓后臺(tái)將該域名進(jìn)行服務(wù)器域名代理。 mpvue開(kāi)發(fā)小程序所遇問(wèn)題及h5轉(zhuǎn)化方案 項(xiàng)目結(jié)構(gòu) |---build |---pages.js文件目錄 |---src ...

    big_cat 評(píng)論0 收藏0
  • 微信程序開(kāi)發(fā)中的二三事之網(wǎng)易云信IMSDK DEMO

    摘要:傳統(tǒng)的網(wǎng)頁(yè)編程采用的三劍客來(lái)實(shí)現(xiàn),在微信小程序中同樣有三劍客。觀察者模式不難實(shí)現(xiàn),重點(diǎn)是如何在微信小程序中搭配其特有的生命周期來(lái)使用。交互事件傳統(tǒng)的事件傳遞類型有冒泡型與捕獲型,微信小程序中自然也有。 本文由作者鄒永勝授權(quán)網(wǎng)易云社區(qū)發(fā)布。 簡(jiǎn)介為了更好的展示我們即時(shí)通訊SDK強(qiáng)悍的能力,網(wǎng)易云信IM SDK微信小程序DEMO的開(kāi)發(fā)就提上了日程。用產(chǎn)品的話說(shuō)就是: 云信 IM 小程序 S...

    weij 評(píng)論0 收藏0
  • 微信程序開(kāi)發(fā):python+sanic 實(shí)現(xiàn)程序登錄注冊(cè)

    摘要:參考鏈接微信小程序七日談第五天你可能要在登錄功能上花費(fèi)大力氣理解認(rèn)證及實(shí)踐網(wǎng)站微信登錄實(shí)現(xiàn)最后,感謝女朋友支持。 開(kāi)發(fā)微信小程序時(shí),接入小程序的授權(quán)登錄可以快速實(shí)現(xiàn)用戶注冊(cè)登錄的步驟,是快速建立用戶體系的重要一步。這篇文章將介紹 python + sanic + 微信小程序?qū)崿F(xiàn)用戶快速注冊(cè)登錄全棧方案。 微信小程序登錄時(shí)序圖如下: showImg(https://segmentfaul...

    antz 評(píng)論0 收藏0
  • 微信程序開(kāi)發(fā):python+sanic 實(shí)現(xiàn)程序登錄注冊(cè)

    摘要:參考鏈接微信小程序七日談第五天你可能要在登錄功能上花費(fèi)大力氣理解認(rèn)證及實(shí)踐網(wǎng)站微信登錄實(shí)現(xiàn)最后,感謝女朋友支持。 開(kāi)發(fā)微信小程序時(shí),接入小程序的授權(quán)登錄可以快速實(shí)現(xiàn)用戶注冊(cè)登錄的步驟,是快速建立用戶體系的重要一步。這篇文章將介紹 python + sanic + 微信小程序?qū)崿F(xiàn)用戶快速注冊(cè)登錄全棧方案。 微信小程序登錄時(shí)序圖如下: showImg(https://segmentfaul...

    Nino 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<