美文网首页
小程序--用户授权并登陆

小程序--用户授权并登陆

作者: 反者道之动001 | 来源:发表于2018-07-17 16:28 被阅读133次
    
    const UserInfoKey = 'userInfoData'
    
    wx.Http = Http
    wx.Cos = Cos
    wx.UserInfoKey = UserInfoKey
    
    App({
      onLaunch () {
        /***   授权检查 *****/
        function isEmptyObject(e) {
            var t
            for (t in e)
                return !1
            return !0
        }
        wx.getSetting({
          success: (res) => {
            const authSetting = res.authSetting
            console.log('---authSetting---')
            console.log(authSetting)
            // 第一次授权
            if (isEmptyObject(authSetting)) {
                console.log('首次授权')
                this.goToQxPage(null)
                return
            // 非第一次授权
            } else {
              // 用户未授权
              if (authSetting['scope.userInfo'] === false) {
                this.goToQxPage(null)
                return
              // 用户以授权
              }else{
                // 检测是否已经获取到了授权    TODO 过期处理
                const data = wx.getStorageSync(UserInfoKey)
                console.log('---已储存的用户数据---')
                console.log(data)
                if(data){
                  return
                }
                // 再次检测
                this.getUserInfo()
              }
            }
          }
        })
      },
      goToQxPage: (e) => {
        console.log('---错误信息---')
        console.log(e)
        console.log('--Go to qx page ----')
        wx.redirectTo({
          url: '/pages/getQx/index'
        })
      },
      getUserInfo() {
        
        wx.login({
          success: login_res => {
            //获取用户信息
            wx.getUserInfo({
              success: (res) => {
                console.log('--get user info res--')
                console.log(res)
                const datas = { code: login_res.code, encryptedData: res.encryptedData, iv: res.iv, store_id: '1' }
                
                wx.Http['com/login'](datas)
                (e => {
                  wx.setStorageSync(UserInfoKey, e.msg)
                })
    
              },
              // 获取失败 重新授权
              fail: this.goToQxPage
            })
          }
        })
          
      }
    })
    

    今天看到有一个喜欢, 然后发现这个代码比较老旧, 不过是常规写法, 可以直接使用, 我这里附上优化后得代码(使用了xstream)

    
    export default function (){
        wx.xs.user.setting()
            .map(e => e.authSetting)
            .subscribe({
                next: e => {
                    console.log('-----authSetting----')
                    console.log(e)
                    // 第一次授权
                    if (wx._.isEmptyObject(e)) {
                        console.log('首次授权')
                        this.goToQxPage(null)
                        return
                    }
                    // 用户未授权
                    if (e['scope.userInfo'] === false) {
                        this.goToQxPage(null)
                        return
                    }
                    // 检测是否已经获取到了授权  
                    const data = wx.getStorageSync(wx.UserInfoKey)
                    console.log('---已储存的用户数据---')
                    console.log(data)
                    if(!data){
                        this.goToQxPage(null)
                        return
                    }
                },
                error: err => console.error(err)
            })
            
    }
    

    --OK--

    顺便上登陆得代码

    
    //获取用户信息
    // wx.Http.user['user/index/logintest']({
    //   code: login_res.code
    // })(e => {
    //   console.log(e)
    // })
    // return
    
    export default function getUserInfo (cb) {
    
      let UserInfoKey = wx.UserInfoKey
      let loginConstParams = {
       马赛克
      }
      
      let handleLogin = async loginPar => {
            wx.xs.fromPromise(wx.Http.user['com/login'](loginPar.params)())
              .debug(e => {
                console.log('---授权结果---')
                console.log(e)
                if(typeof e.msg !== 'object' || typeof e.msg.token !== 'string'){
                  throw new Error('msg结果错误')
                }
              })
              .subscribe ({
                next: loginResult => {
                  wx.setStorageSync(UserInfoKey, {
                    ...JSON.parse (loginPar.info.rawData),
                    ...loginResult.msg,
                  })
                  cb && cb ()
                  wx.hideLoading ()
                },
                error: err => {
                  console.log(err)
                  wx.hideLoading ()
                }
            })
      }
    
      wx.showLoading ({title: '授权中'})
      wx.xs
        .combine (wx.xs.user.login (), wx.xs.user.info ())
        .map (([login_res, info]) => ({
          info,
          params: {
            code: login_res.code,
            encryptedData: info.encryptedData,
            iv: info.iv,   
            ...loginConstParams,  
          } 
        }))
        .debug (e => {
          console.log ('---授权请求数据--')
          console.log (e)
        })
        .subscribe ({
            next: handleLogin,
            error: err => {
                console.error (err)
                // 这步不能省略, 要明确保证工作环境是干净的
                wx.clearStorageSync()
                wx.hideLoading ()
            },
        })
    }
    
    

    相关文章

      网友评论

          本文标题:小程序--用户授权并登陆

          本文链接:https://www.haomeiwen.com/subject/ellgpftx.html