• <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        當前位置:雨林木風下載站 > 應用軟件教程 > 詳細頁面

        小程序授權登陸的處理方法(附代碼)

        小程序授權登陸的處理方法(附代碼)

        更新時間:2025-09-20 文章作者:未知 信息來源:網絡 閱讀次數(shù):

        微信小程序,簡稱小程序,英文名Mini Program,是一種不需要下載安裝即可使用的應用,它實現(xiàn)了應用“觸手可及”的夢想,用戶掃一掃或搜一下即可打開應用。小程序是一種不用下載就能使用的應用,也是一...
        微信小程序,簡稱小程序,英文名Mini Program,是一種不需要下載安裝即可使用的應用,它實現(xiàn)了應用“觸手可及”的夢想,用戶掃一掃或搜一下即可打開應用。小程序是一種不用下載就能使用的應用,也是一項門檻非常高的創(chuàng)新,經過將近兩年的發(fā)展,已經構造了新的小程序開發(fā)環(huán)境和開發(fā)者生態(tài)。
        本篇文章給大家?guī)淼膬热菔顷P于小程序授權登陸的解決方法(附代碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

        最近在做小程序的項目,依舊是商城,又開始研究微信的登陸授權坑,第一次接觸小程序,授權登陸也是一塌糊涂以后再慢慢的改進

        場景

        微信用戶可以通過搜索進入小程序
        也可以通過別人分享進入小程序
        進入小程序之后需要用戶授權拿到用戶信息進行注冊

        代碼實現(xiàn)

        初始化頁面home頁用戶第一次進入小程序必須授權后臺注冊并登陸
        app.json

        {
        "pages": [
            "pages/home/index", 
            "pages/login/index",
             ...
           ]
        }

        login.js邏輯進入頁面判斷一下是不是授權過,判斷用戶是否已經授權,已經授權顯示登陸,沒有授權顯示授權,用戶無論是注冊還是登陸用的是后臺提供的同一個接口。返回token存在本地
        login.js

        const App = getApp()
        import { loginModel } from '../../models/login.js'
        import { MineModel } from '../../models/mine.js'
        import { encodeUnicode } from '../../utils/index.js'
        const ModelLogin = new loginModel()
        const Modelmine = new MineModel()
        Page({
          data: {
            logged: !1,
            isauth: false,
            locked: false
          },
          onLoad: function(options) {
            // 返回到之前要刷新
            var pages = getCurrentPages() // 獲取頁面棧
            var prevPage = pages[pages.length - 2] // 前一個頁面
            prevPage.setData({
              isBack: true
            })
          },
          onShow: function() {
            // 如果已經授權則顯示登錄,直接登錄不調用授權
            App.WxService.getSetting().then(res => {
              if (res.authSetting['scope.userInfo']) {
                this.setData({
                  isauth: true
                })
              }
            })
            //token 不能在page外面定義,變量寫在 page 外面有緩存
            const token = App.WxService.getStorageSync('utoken')
            // 如果有token顯示已經授權
            this.setData({
              logged: !!token
            })
            token && setTimeout(this.goBack, 1500)
          },
          login() {
            this.wechatSignUp()
          },
          goBack() {
            // 返回登錄之前的頁面
            wx.navigateBack({
              delta: 1
            })
          },
          // 登陸注冊
          wechatSignUp(cd) {
            // 上鎖如果正在請求接口那么就返回
            if (this.data.locked) {
              return
            }
            this.data.locked = true
            //注冊或者登陸獲取token
            let code = ''
            App.WxService
              .login()
              .then(data => {
                code = data.code
                wx.setStorageSync('logincode', data.code)
                return App.WxService.getUserInfo()
              })
              .then(data => {
                // 請求后臺登錄注冊接口
                return ModelLogin.wechatSignUp({
                  encrypteData: data.encryptedData,
                  iv: data.iv,
                  rawData: encodeUnicode(data.rawData), // 編碼
                  signature: data.signature,
                  code: code
                })
              })
              .then(data => {
                this.data.locked = false
                if (data.data.token == '') {
                  wx.showToast({
                    title: '登錄失敗',
                    icon: 'none'
                  })
                  return
                }
                App.WxService.setStorageSync('utoken', data.data.token)
                // 訪問后臺接口獲取用戶信息
                ModelLogin.getVipInfo({ token: data.data.token }).then(res => {
                  App.globalData.userInfo = res.data.userInfo
                  // 返回上一頁
                  this.goBack()
                })
              })
              .catch(err => {
                this.data.locked = false
                console.log(err)
              })
          }
        })

        這里的App.WxService等價于wx因為wx是回調的方式,這里使用的是promise。
        先判斷有沒有授權,沒有授權顯示點擊授權,有授權顯示點擊登錄,調用的方法都是wechatSignUp,拿到wx.login的code和wx.getUserInfo的數(shù)據(jù)給后臺,然后后臺返回token,然后再去訪問后臺獲取用戶信息
        login的邏輯大概就是這些
        login.wxml

        <view class="login-container">
          <view class="login" wx:if="{{ !logged }}">
            <view class="app-info">
              <image class="app-logo" src="./s-toplogo@2x.png" />
              <text class="app-name">商城</text>
            </view>
            <view class="alert">
              <view class="alert-title" wx:if="{{!isauth}}">請同意授權</view>
              <view class="alert-title" wx:if="{{isauth}}">請登錄</view>
              <view class="alert-desc">
                <view class="alert-text">為了讓頭號買手可以更好的為您服務</view>
              </view>
            </view>
            <button type='primary' wx:if="{{!isauth}}" class="sui-f16" open-type="getUserInfo" bind:getuserinfo="wechatSignUp">確認授權</button>
            <button type="primary" wx:if="{{isauth}}" class="weui-btn" bindtap="login">確認登錄</button>
          </view>
          <view class="logged" wx:else>
            <image class="logged-icon" src="./s-toplogo@2x.png" />
            <view class="logged-text">近期你已經授權登陸過商城</view>
            <view class="logged-text">自動登錄中</view>
          </view>
        </view>

        訪問后臺接口的時候在header里傳token如果后臺沒有拿到token就返回401,前端統(tǒng)一攔截跳轉到登陸頁面

        結束

        關于app.js本來打算在app做攔截的,但是異步請求總是在進入頁面后才拿到后臺返回的數(shù)據(jù),因為用戶可能從商品詳情頁等其他頁面進入小程序,授權后要返回進入頁面,在app.js中攔截就無法返回頁面了,所以就直接在頁面的js里去判斷,還好可以分享的頁面不多所以就沒有在app.js里寫任何東西。第一次接觸,希望以后能優(yōu)化了再發(fā)文記錄一下

        以上就是小程序授權登陸的解決方法(附代碼)的詳細內容,更多請關注php中文網其它相關文章!


        小程序是一種不需要下載安裝即可使用的應用,它實現(xiàn)了應用“觸手可及”的夢想,用戶掃一掃或者搜一下即可打開應用。

        溫馨提示:喜歡本站的話,請收藏一下本站!

        本類教程下載

        系統(tǒng)下載排行

        主站蜘蛛池模板: 24小时免费直播在线观看| 蜜臀98精品国产免费观看| 国产精品自在自线免费观看| 性xxxx黑人与亚洲| 黄色片在线免费观看 | 中文亚洲AV片不卡在线观看| 日韩在线观看视频免费| 亚洲国产成人VA在线观看| 亚洲aⅴ无码专区在线观看春色| 在线永久免费观看黄网站| 美女被免费网站视频在线| 免费大黄网站在线观看| 97国免费在线视频| 亚洲日本一区二区| 国产在线a免费观看| 亚洲成熟丰满熟妇高潮XXXXX| 免费永久国产在线视频| 羞羞视频免费网站在线看| 西西人体44rt高清亚洲| 国产va免费精品观看精品| 亚洲色丰满少妇高潮18p| 国产成人免费网站在线观看| 一级成人a做片免费| 亚洲成人中文字幕| 成人午夜免费福利| 9久热精品免费观看视频| 亚洲精品动漫在线| 全免费一级毛片在线播放| 国产成人精品免费大全| 亚洲黄色免费观看| 日本高清免费中文字幕不卡| 91在线视频免费观看| 亚洲毛片基地4455ww| 亚洲精品第一国产综合境外资源| 日韩免费视频一区二区| 亚洲国产熟亚洲女视频| 亚洲日韩精品无码专区网址| 韩国免费一级成人毛片| 国产免费AV片在线观看播放| 亚洲国产成人精品无码区在线秒播| 免费A级毛片无码久久版|