微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么使用 vuejs 和 pouchdb,couchdb 登录良好但 couchdb 会话为空

如何解决为什么使用 vuejs 和 pouchdb,couchdb 登录良好但 couchdb 会话为空

使用 Vusjs、pouchdb-browser、CouchDB、pouchdb-authentication

我想检查一个会话是否已打开以用于离线保​​持登录状态。

当我从 pouchdb-authentication 使用 db.logIn 登录时:

回复{ok: true,name: "01HAYJ",roles: Array(1)}

当我运行“getSession”时,我得到 userCtx.name 为空

会话响应:

info:
authentication_handlers: Array(2)
0: "cookie"
1: "default"
length: 2
__proto__: Array(0)
__proto__: Object
ok: true
userCtx:
name: null
roles: Array(0)

这是我的动作片段:

setUser({commit,dispatch},payload){
      console.log('store action payload: ',payload);
      var user = payload.user;
      var pass = payload.pass
      
      db.logIn(user,pass,function (err,response) {
        if (err) {
          if (err.name === 'unauthorized' || err.name === 'forbidden') {
            alert("Login Failed,check user or password!")
          } else {
          
          }
        }
      }).then(function (response) {
        // handle response
        console.log('response: ',response);
        db.getSession(function (err,response) {
          if (err) {
            // network error
            console.log('session error: ',error);
            
          } else if (!response.userCtx.name) {
            // nobody's logged in
            console.log('nobody is logged in' );
            
          } else {
            // response.userCtx.name is the current user
            console.log('response.userCtx.name: ',response.userCtx.name );
            commit('setUser',response.userCtx.name)
            router.push({ name: 'dashboard'})
          }
        });
        commit('setUser',payload.user)
      }).catch(function (error) {
        // handle error
        console.log('error: ',error);
        dispatch('logout');
      });
    }

解决方法

您的代码中混合了回调和承诺。 db.login 可能在 db.session 调用之前没有完成。我不确定代码段中的“then”是否是另一个 Promise 的一部分,但我将如何构建调用:

setUser({commit,dispatch},payload){
      console.log('store action payload: ',payload);
      var user = payload.user;
      var pass = payload.pass
      
      db.logIn(user,pass).then(function (response) {
        // handle response
        console.log('response: ',response);
        return db.getSession();
      }).then(response) {
        //check user details from the session response here
        commit('setUser',payload.user)
      }).catch(function (error) {
        // handle error
        console.log('error: ',error);
        dispatch('logOut');
      });
    }

(这是一个例子 - 可能有错别字!)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。