【发布时间】:2016-11-07 13:11:50
【问题描述】:
背景:我有一个显示电影列表的应用程序,但我想做的是只为获得授权的用户显示列表(通过检查存储在本地的令牌-存储)。
所以我想要实现的流程是:
- 用户进入应用主页面
- 检查本地存储是否有令牌
- 如果是,检查它是否被授权
- 如果授权 = 显示列表,否则不显示
所以我现在要做的就是在我创建商店后立即在我的主(包装器)组件中:
const store = configureStore();
var token = localStorage.get(authConstants.LOCAL_STORAGE_TOKEN_KEY);
if(token){
store.dispatch(actions.checkInitialAuth(token));
}
checkInitialAuth 操作是:
export function checkInitialAuth(token){
return dispatch => {
dispatch(requestLogin());
return fetch(authConstants.API_USER_DETAILS, {headers: { 'Authorization' : `Bearer ${token}`}})
.then(function(response){
if(!response.ok){
throw Error(response.statusText);
}
return response.json();
})
.then(function(user){
localStorage.set(authConstants.LOCAL_STORAGE_TOKEN_KEY, token);
dispatch(receiveLogin(user)); // <==========
dispatch(setTopMovies()); // <==========
})
.catch(function(err){
// TODO: handle errors
console.log(err);
});
}
}
所以问题是,在创建存储之后和元素创建之前调用初始身份验证检查是否正确?
现在如果我必须在用户被授权的情况下调用更多操作,我是否必须在 checkInitialAuth 操作中的 then 中调用它们?它是进行所有动作调度调用的正确位置吗?
最后一个,当身份验证错误时(我手动将令牌更改为本地存储上的错误),console.log(err) 正在按预期记录,但我也有这个烦人的401 error in the console ,我可以以某种方式避免它吗?
非常感谢!
【问题讨论】:
标签: authentication reactjs promise redux fetch-api