微信开发小坑

一、网页授权(OAuth2.0)

1、授权后跳转,开了新的对话,拿不到原来的session

我网站授权流程如下
登录--微信授权--后端验证--进入业务页面
1、登录完了之后将user的信息存在session中
2、微信授权
3、后端验证(这个时候,需要openId,和userId, openId是微信给的能拿得到,但是userId存在session却拿不到了),

第三点,是因为微信授权后,将开启一个新的对话,第一步登录的session中的用户信息被清空了,拿不到了,

解决方案
(1)将userId存在redirectUri中

const self = this
const currentUser = getCache({
  key: 'currentUser'
})
const code = self.$route.query.code
const userId = self.$route.query.userId
if (code) {
  request({
    url: '/sns/oauth2/access_token',
    data: {
      appid: config.appid,
      secret: config.secret,
      code: code,
      grant_type: 'authorization_code'
    }
  }, (res) => {
    const openid = res.openid
    if (openid && userId) {
      // 进行后端验证
    } else {
      alert('错了')
    }
  }).catch((e) => {
    console.log(e)
  })
} else {
  new window.WxLogin({
    id: 'login_container',
    appid: config.appid,
    scope: 'snsapi_login',
    redirect_uri:currentUser ? `yourUrl${currentUser.userId}` : 'yourUrl',
    state: '',
    style: '',
    href: ''
  });
}

(2)将userId存在state中

const self = this
const currentUser = getCache({
  key: 'currentUser'
})
const code = self.$route.query.code
const userId = self.$route.query.state
if (code) {
  request({
    url: '/sns/oauth2/access_token',
    data: {
      appid: config.appid,
      secret: config.secret,
      code: code,
      grant_type: 'authorization_code'
    }
  }, (res) => {
    const openid = res.openid
    if (openid && userId) {
      // 进行后端验证
    } else {
      alert('错了')
    }
  }).catch((e) => {
    console.log(e)
  })
} else {
  new window.WxLogin({
    id: 'login_container',
    appid: config.appid,
    scope: 'snsapi_login',
    redirect_uri: yourUrl,
    state: currentUser ? currentUser.userId : '',
    style: '',
    href: ''
  });
}
阅读 2.3k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进