tencentyun/wafer2-node-sdk

求助大神:本地部署,登陆时报错Cannot read property 'user_info' of undefined

Closed this issue · 2 comments

【nodemon提示报错如下】
koa-weapp-demo Catch Error: TypeError: Cannot read property 'user_info' of undefined at AuthDbService.getUserInfoByOpenId.then.userinfo (/data/release/weapp/node_modules/wafer-node-sdk/lib/auth/index.js:41:56) at runCallback (timers.js:810:20) at tryOnImmediate (timers.js:768:5) at processImmediate [as _immediateCallback] (timers.js:745:5) From previous event: at Builder.Target.then (/data/release/weapp/node_modules/knex/lib/interface.js:36:24) at getSessionKey.then.pkg (/data/release/weapp/node_modules/wafer-node-sdk/lib/auth/index.js:40:62) at at process._tickCallback (internal/process/next_tick.js:188:7) +2ms

【/……/auth/index.js附近代码】

// 如果只有 code 视为仅使用 code 登录
if (code && !encryptedData && !iv) {

    return getSessionKey(code).then(pkg => {
        const { openid, session_key } = pkg
        // 生成 3rd_session
        const skey = sha1(session_key)
        return AuthDbService.getUserInfoByOpenId(openid).then(userinfo => {
            const wxUserInfo = JSON.parse(userinfo.user_info)

            return AuthDbService.saveUserInfo(wxUserInfo, skey, session_key)
            .then(userinfo => ({
                loginState: LOGIN_STATE.SUCCESS,
                userinfo: {
                    userinfo: wxUserInfo,
                    skey: userinfo.skey
                }
            }))
        })
    })
}

【getUserInfoByOpenId方法对应的部分代码】

/**
 * 通过 openid 获取用户信息
 * @param {string} openid 用户的 openid
 */
function getUserInfoByOpenId (openId) {
    if (!openId) throw new Error(ERRORS.DBERR.ERR_NO_OPENID_ON_CALL_GETUSERINFOFUNCTION)

    return mysql('cSessionInfo').select('*').where({ open_id: openId }).first()
}

【疑问&求助】
同样server代码,在腾讯云免费开发环境就正常,本地调试的时候就报错,看起来是从cSessionInfo中没有查询到数据,,,
感觉很奇怪:在该步骤前,似乎没调用过AuthDbService.saveUserInfo……如果确实是这样,那cSessionInfo里根本没有数据啊,AuthDbService.getUserInfoByOpenId必然报错啊,,,

还是我哪里看错了,求大神帮忙解答TAT

用户第一次登录不能使用 code 登录

奥,谢谢大神解答,终于登陆成功了,,
原来是我用微信云登陆过,,改了client的config.js中的host后又用本地环境登陆……
qcloud.Session.get()拿到了会话信息。。所以调用qcloud.loginWithCode了……-_-#
【/client/pages/index/index.js中部分代码】
const session = qcloud.Session.get()

    if (session) {
        // 第二次登录
        // 或者本地已经有登录态
        // 可使用本函数更新登录态