我也在用redux saga. 你说的这个问题我也正在写。我写的比较简单,分开监听login和log out,应该就不存在login flow里的问题了吧。
刷新token我觉得如果是第三方登录的话,可能你要看第三饭登录的文档来做这个。只是自己的我觉得没必要那么复杂,简单的服务端刷新token,客户端替换就好。
权限的话,我觉得交给服务端判断比较好。然后这边在catch里做相应的处理就可以了。要是做什么目录的权限管理。。。这估计要去stackoverflow上问了。当然如果是服务端渲染的项目,可能可以考虑在服务端路由上做文章。
下面是我登录的代码,可能你已经写好了。。大家相互交流吧。貌似redux-saga用的人不是很多。
import { takeEvery } from 'redux-saga'
import { fork, call, put } from 'redux-saga/effects'
import { push } from 'react-router-redux'
import * as types from './types'
import http from './../../utils/http'
function* asyncLogin(action) {
try {
const loginResult = yield call(http.auth.Login, action.loginValues)
localStorage.setItem('id_token', loginResult.token)
yield put({ type: types.LOGIN_SUCCESS, loginResult })
yield put(push('/'))
} catch (error) {
yield put({ type: types.LOGIN_FAILURE, error })
}
}
function* watchLogin() {
yield* takeEvery(types.LOGIN_REQUEST, asyncLogin)
}
export default function * () {
yield [
fork(watchLogin),
]
}