我尝试创建一个非常简单的redux中间件来处理我的应用程序中的身份验证需求。此应用中的用户可以有3种状态:
所以我认为一个简单的解决方案就是让中间件检查任何异步操作的状态代码并相应地重定向。因此,401可能会触发重定向到登录/注册页面/login
,而422会触发重定向到辅助注册/register
。
这是我到目前为止的基本设置:
import { browserHistory } from 'react-router'
export default function({ dispatch }) {
return next => action => {
const url = window.location.href.split('/')
const location = url[url.length - 1]
if (location === 'login' || location === 'registration') {
return next(action)
}
let status;
const token = localStorage.getItem('token')
if (action.payload) {
status = action.payload.status
}
if (status === 401) {
return browserHistory.push('/login')
} else if (status === 422) {
console.log('redirect to registration')
return browserHistory.push('/register')
}
return next(action)
}
}
显然,这种方法不像大多数react / redux auth示例所使用的那样使用任何更高阶的组件。它似乎工作正常,但我看到一个视图在重定向之前开始渲染一瞬间,所以它不是100%平滑。
有没有更有效/简单的方法来处理这三个状态auth系统?我正在使用react-router-redux。