我没有使用 Facebook 的登录流程,但我认为这将是相同的想法。
因此,要登录并存储数据,只需为用户创建额外的 reducer,并使用以下字段:
{
access_token: null,
isLogin: false,
isProcessingLogin: true,
profile: {}
}
当然,你可以有更多的字段,你也可以把注册信息放在这里(例如,isUserRegistering,或details,等等)。
所有你必须做的——创建像 logIn 和 logOut 这样的方法,它们将完成这个流程。在其中,只需更改相应的字段即可更新您的 UI 以添加加载、错误处理等。
类似于以下代码:
// action creator
const logIn = (params) => {
return dispatch => {
dispatch({ type: 'PROCESSING_LOGIN' });
makeAPICall(params)
.then(
res => dispatch({ type: 'SUCCESS_LOGIN', payload: res }),
err => dispatch({ type: 'FAIL_LOGIN', payload: err })
);
};
};
// reducer
['PROCESSING_LOGIN'](state) => {
return Object.assign({}, state, {
isProcessingLogin: true
});
},
[SUCCESS_LOGIN](state, action) => {
return Object.assign({}, state, {
isLogin: true,
isProcessingLogin: false,
access_token: action.payload.meta.access_token
});
}
我不得不提一下,如果你的请求必须在 reducer 中区分它们是否带有令牌,那么构建中间件以始终附加令牌可能不是一个好主意——因此,添加它可能会更灵活一些自己代币。