如何解决为什么使用 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 举报,一经查实,本站将立刻删除。