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

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

作者: 反者道之动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 ()
        },
    })
}

相关文章

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

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

  • 小程序登陆注册功能的实现

    我们在开发小程序时,难免会用到登陆注册功能。通常小程序有为我们提供用户授权登陆的功能,但是这个只能获取用户的头像和...

  • centos7将用户赋予root权限

    用root用户登陆后 创建用户并授权:adduser newUser (创建用户)passwd newUser (...

  • 自行部署腾讯云微信小程序后端开发套件wafer

    最近以官方的demo为例配置部署wafer,实现了小程序的授权登陆、获取用户信息以及小程序websocket聊天室...

  • 营销小程序功能架构

    1 登陆,授权获取用户信息 2 获取用户来源 3 获取用户行为 (截屏,分享,点击) 4 小程序的后台配置项 (模...

  • 云服务器下mysql授权远程登陆

    1)首先以 root 帐户登陆 MySQL(在授权之前要确保3306端口开放)2)创建远程登陆用户并授权 3)给用...

  • 小程序授权登陆

    所要实现效果如下图 图二在手机端显示的效果其实是下面这样的 解决的问题其实是官方现在不可以使用wx.getUser...

  • 小程序授权弹窗

    作者:黄杰;标签:小程序 授权 需求 进入小程序首页,用户点击页面任意地方触发小程序授权弹窗,如果已授权则不触发弹...

  • 小程序登录为什么能做到更好的体验

    小程序登陆为啥能做得这么简洁优雅呢?首先,我们需要大致了解小程序用户体系。 小程序用户体系 对于每个小程序,微信都...

  • 2018-09-21 小程序

    小程序面试题 小程序授权登录流程 0、如何获得用户信息...

网友评论

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

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