问题描述
使用 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');
});
}
(这是一个例子 - 可能有错别字!)