嗨,我是工作的反应和还原单页应用程序,我面临一个问题。
在我的应用程序,从管理面板,管理员可以使应用程序关闭和open.Mean,如果应用程序是从管理端关闭,那么我们将重定向我们的用户到一个错误的页面路由,如果应用程序是从管理面板打开,那么我们将允许用户访问和查看我们的应用程序的页面。
但我面临一个问题,我来自PHP和Laravel背景,在他们的我可以添加一个中间软件在我的每一个路线,我可以很容易地实现我的目标。
我已经对它做了一些研究,我发现我必须为此创建一个更高级的组件,并在应用程序启动时调用api,并且必须将api结果存储在本地存储中,但是如果我调用api并将api结果存储在本地存储空间中,那么在接下来的5分钟内,管理人员关闭餐厅,然后如何更新我的客户端本地存储空间,以便在应用程序从管理面板关闭时限制用户查看页面的权限。
因此,我需要在每个路由之前发送一个ajax请求,以验证用户是否可以查看页面。
在这个问题上,有人能帮我吗?我怎样才能实现我的上述目标?
发布于 2019-02-04 13:34:55
我认为在任何路由之前发送HTTP请求并不是解决问题的最佳解决方案。
最简单的方法是,在餐厅关闭时,响应授权的HTTP请求,只返回HTTP错误。因此,您可以在客户端设置一些HTTP请求拦截器,并拦截每个HTTP响应--如果其中包含错误响应--那么只需将用户重定向到错误页面。
检查这拦截器
发布于 2019-02-19 12:50:07
如果您使用的是connected-react-router
每次路由更改时,它都会以'@@router/LOCATION_CHANGE'
类型分发操作。
在您的示例中,您需要在路由更改之前执行一些api调用。
最好的地方是redux 中器。
这是剩余流,
调度动作->存储获取动作并传递给中间件,->中间件做一些事情并传递给->减速器,得到动作并计算新状态
因此,您将拥有一个中间件,它执行api调用并检查所需的内容。然后,您决定将操作传递给减速机,从而改变路线,或者停止操作并重定向。
您可以为'@@router/LOCATION_CHANGE'
添加redux中间件
就像这样
import { push } from 'connected-react-router'
const loadingMiddleware = (store) => (next) => (action) => {
if (action.type === '@@router/LOCATION_CHANGE') {
// TODO: do api call here
if (appIsClosed){
// redirect to error route
dispatch(push('/error'))
// halt current action by returning void
return;
}
}
// pass onto next middleware
return next(action);
};
export default loadingMiddleware;
然后在创建存储区时添加此中间件。
import { createStore, combineReducers, applyMiddleware } from 'redux'
const todoApp = combineReducers(reducers)
const store = createStore(
todoApp,
// applyMiddleware() tells createStore() how to handle middleware
applyMiddleware(loadingMiddleware)
)
https://stackoverflow.com/questions/54517082
复制相似问题