在redux中间件中使用react-router进行重定向

2024-04-05

我创建了一个中间件来检查请求是否返回无效的访问响应。如果状态是 401,我想将用户重定向到登录页面

这是中间件代码

import React from 'react';
import { push, replace } from 'react-router-redux';

const auth_check = ({ getState }) =>  {
  return (next) => (action) => {
    if(action.payload != undefined && action.payload.status==401){
        push('login');
        console.log('session expired'); 
    }
    // Call the next dispatch method in the middleware chain.
    let returnValue = next(action);

    return returnValue
  }
}

export default auth_check;

将其包含在index.js中

...

const store = createStore(reducers, undefined, 
            compose(
                applyMiddleware(promise,auth_check)
                )
            );
const history = syncHistoryWithStore(browserHistory, store);

ReactDOM.render(
  <Provider store={store}>
    <Router history={history} routes={routes} />
  </Provider>
  , document.querySelector('.app'));

Push方法不会重定向页面。我确信代码会经过该部分,因为日志显示了


如果您更喜欢 Redux 风格的操作,该库还提供了一组操作创建器和一个捕获它们的中间件并将它们重定向到您的历史记录实例。

for: push(location), replace(location), go(number), goBack(), goForward()

您必须安装 routerMiddleware 才能使这些操作创建器正常工作。

import { routerMiddleware, push } from 'react-router-redux'

// Apply the middleware to the store
const middleware = routerMiddleware(browserHistory)
const store = createStore(
  reducers,
  applyMiddleware(middleware)
)

// Dispatch from anywhere like normal.
store.dispatch(push('/foo'))

React Router 还提供历史记录的单例版本(browserHistory 和 hashHistory),您可以从应用程序中的任何位置导入和使用。

import { browserHistory } from 'react-router'

if(action.payload != undefined && action.payload.status==401){
        browserHistory.push('login');
        console.log('session expired'); 
}

顺便说一句,您可以使用检查身份验证onEnter https://github.com/reactjs/react-router/blob/master/docs/API.md#onenternextstate-replace-callback or redux-auth-包装器 https://github.com/mjrussell/redux-auth-wrapper

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在redux中间件中使用react-router进行重定向 的相关文章

  • 过滤嵌套的 JSON 对象

    我有一个搜索栏 您可以在其中输入员工姓名 它应该根据过滤器返回姓名 我有一个嵌套的 JSON 对象 如下所示 我需要深入了解该对象以访问数组中的员工姓名 您可以看到我尝试实现的多个选项 它们已被注释掉 我的问题是代码没有过滤名称并返回所有名
  • 如何解决此错误“不要使用对象作为类型”?

    我不明白这个错误消息造成的 我的组件有两个和一个包含对象的数据数组 我收到一条错误消息 不要使用object作为一种类型 这object类型目前很难使用 我该如何解决它 我附加了数组包含对象的数据 first tsx import data
  • 如何在ReactJS中定义常量

    我有一个将文本映射到字母的函数 sizeToLetterMap function return small square s large square q thumbnail t small 240 m small 320 n medium
  • 将 sass 变量导入 gatsby 组件中引用的第二个 Sass 文件

    我正在使用 Gatsby 构建一个静态站点项目 我已经成功安装了 gatsby sass 插件并让 sass 正常工作 但是 我无法将自定义 sass 变量文件正确导入到其他组件 sass 文件中 下面是我的文件夹结构 src compon
  • Facebook SDK 登录/注销 ngrok

    我正在尝试将我正在构建的网络应用程序与 Facebook 集成 Facebook 现在要求所有 API 调用都必须从 https 站点进行 我正在构建的这个应用程序只是为了好玩 所以我使用的是 localhost 我在用着ngrok将我的请
  • 在社交媒体上分享 Reactjs 链接时,react-helmet 中的元标记不显示

    我有一个在客户端运行reactjs的项目 在后端运行nodejs express 我实现了react helmet来更新索引之外的路线的标题和元标记 例如 用户查看帖子 viewpost q POSTID 然后客户做了一个GET reque
  • 自定义 SVG 未加载到我的图像标签中

    目前我正在尝试将自定义 svg 组件加载到图像标签内 但由于某种原因 我无法看到地图组件内的 svg 图像 我的自定义 SVG 文件如下所示 我在 SVG 中加载另一个图像
  • 如何包装内在组件,保留大部分 Props?

    我想用我自己的 React 功能组件包装一个标准按钮 但我希望新组件的用户能够设置 几乎所有底层按钮的道具 当然 我想保持正确的打字 所以如果 WrappedButton 包含一个button then
  • 下一张图片不采用类属性

    我正在使用 Next js 和next image显示图像 但 CSS 在其中不起作用 该图像是 SVG 格式 我已将其放在公共文件夹中 我正在使用 Tailwind CSS 与此一起使用
  • React Image:createObjectURL 链接给出错误 404(未找到)

    我在 React with Typescript 中使用以下代码创建了一个 ImageUrl 它创建了一个 URL 但不显示图片图像 单击 URL 例如 http localhost 3003 0b4de100 d8eb 49a7 b43a
  • Redux 减速器的副作用

    Redux 减速器应该没有副作用 但是 如果某个操作应该触发浏览器中文件的下载 其中内容基于商店的状态 该怎么办 这当然应该算作副作用吗 像下面这样的方法可以吗 还是我应该寻找替代方法 case SAVE GRID const json s
  • css-loader 不导入 .css 文件返回空对象

    从 css 文件导入样式 返回空对象 看来 css loader 无法正常工作 谁可以帮我这个事 请找到下面的参考文件 index js import React from react import style from header cs
  • 以编程方式更改 Redux-Form 字段值

    当我使用redux formv7 我发现没有办法设置字段值 现在在我的form 我有两个select成分 当第一个时 第二个的值就会很清楚select元件值改变 在类渲染中 div div site div div div div
  • 如何在 Gatsby 页面上包含本地 JavaScript?

    我是一个完全的 React 新手 我想这里有些基本的东西我不太明白 默认的 Gatsby 页面如下所示 有没有办法像这样使用本地 js 文件 我想要实现的是让反应忽略script js但仍然让客户端使用它 默认的 Gatsby 页面看起来像
  • 如何使用 Coffeescript 在 React 中渲染 HTML 标签?

    我目前正在学习 ReactJS 以及如何使用 Ruby on Rails 作为其后端 所以如果我做出愚蠢的假设 我深表歉意 请随意责骂我 我正在关注一个教程 其中作者使用 Coffeescript 而不是 ES6 来处理他的 ReactJS
  • 调用高阶组件时在 React 中访问类外部的 prop

    我正在尝试使用高阶组件 HOC 模式来重用一些连接到状态并使用 Redux Form formValueSelector 方法的代码 formValueSelector 需要一个引用表单名称的字符串 我想动态地设置它 并且每当我需要项目的值
  • Redux - 从函数调用操作

    我正在尝试从函数调用 redux 操作 我调用该函数的组件已连接到商店 但是 如果我通过以下操作 它就不起作用 function myFunc action action 有没有办法通过参数传递动作 谢谢 using bindActionC
  • 将两个 JSON 数据合并为具有特定键值的一个

    我有两个 CSV 文件 球数据 json id 1 color red id 2 color blue 法庭 json court id 2001 ball in use 1 court id 2005 ball in use 2 如何根据
  • 这种类型注释在没有 TypeScript 的 React 代码中如何工作?

    我在看这段代码示例 https reacttraining com react router web example auth workflow在 ReactRouter 页面上 这篇文章很有趣 const PrivateRoute com
  • 为什么我收到“在嵌套函数中通过 this 对类字段进行潜在无效的引用访问”错误

    在普通 JS 中 我的代码可以正常工作 对于这种情况 我想组件化我的Wall类应该在浏览器中显示用户上传的图像 同样 这在 vanilla JS 中正常工作 但在 JSX 中不起作用 我得到了一个potentially invalid re

随机推荐

  • 如何使用 pd.to_datetime() 设置频率?

    在拟合统计模型时 我收到有关日期频率的警告 首先 我导入一个数据集 import statsmodels as sm df sm datasets get rdataset package datasets dataname airqual
  • GmailApp.getAliases() 返回一个空白列表

    我有一个有别名的用户 在 admin google com 中 我可以查看所有别名 但是当使用该用户时 我仅使用以下代码创建一个 Google Apps 脚本 var aliases GmailApp getAliases Logger l
  • 在类定义中使用类自己的类型[重复]

    这个问题在这里已经有答案了 以下代码无法按预期工作 显然 我不能在类定义中使用类自己的类型 class Foo def init self key str gt None self key key def eq self other Foo
  • 无法通过 SSH 克隆 Azure DevOps 存储库,需要密码

    我很难尝试通过 SSH 将 Azure DevOps 私有存储库克隆到运行 Ubuntu 18 04 的本地计算机 下列的 我使用创建了 SSH 密钥ssh keygen并提供密码 将公钥添加到 Azure DevOps 下用户设置 gt
  • 使用 C# 写入 CSV 文件

    我正在寻找一种在 CSV 文件的不同单元格中写入字符串的方法 我正在使用这个程序 private void button1 Click object sender EventArgs e string filePath E test csv
  • 通过 PowerShell 将所有已安装的软件分组到一个单元中

    我让 PowerShell 脚本在我们网络上的所有 PC 上运行 并从 PC 获取信息并将其保存在 CSV 文件中 并每次使用新 PC 作为新行更新文件 logData pscustomobject ComputerName Compute
  • 通过VB6发送电子邮件

    我想知道是否有办法通过VB6发送电子邮件 SMTP 我有一个应用程序 只需要在用户完成后发送一封简单的电子邮件 让一组人知道该应用程序已处理 有没有办法做到这一点 是的 取决于您使用的 Windows 版本 假设更高版本之一 CDO Mes
  • onEdit 可以以编程方式创建触发器吗?

    我编写了一个简单的脚本 尝试以编程方式从 onEdit 函数创建脚本 function onEdit test function test triggerLater function customMsgBox Browser msgBox
  • Simulink/HDL Coder 中的反馈循环

    我有一个 Simulink HDL 编码器系统 请参见下图 我有 3 个输出和 3 个输入 我希望我的系统运行 10 次 每次迭代后 它应该选择输出并将它们用作输入 我怎样才能做到这一点 使用存储器和每个信号的初始值块构建一个循环 内存块允
  • 一家大型、分散的公司应该如何与 iOS 开发者计划合作?

    I think这是SO的工作 而不是程序员 https softwareengineering stackexchange com 如果我错了请告诉我 我在一家公司工作 该公司在全国 美国 各地设有多个办事处 我所在的部门希望获得 Appl
  • 如何检查函数的类型参数是否静态解析?

    非常简单的例子 let myfun x x在智能感知中 它显示 x a gt a 在 FSI 中 它显示 x a gt a let inline myfun x x在智能感知中 它显示 x a gt a 在 FSI 中 它显示 x a gt
  • msbuild SLN 并且仍然获得单独的项目输出?

    我有一个普通的 SLN 文件 我可以从命令行使用 msbuild 很好地编译它 我这样做 C slndir gt msbuild p OutDir C slnbin 它将所有内容转储到 C slnbin 但网站除外 网站部署到 C slnb
  • 按属性对 XML 文件进行排序

    我有以下 XML 代码
  • 如何通过JSON的replacer函数对对象进行字符串化?

    这是我的代码 BAD a 2 b 1 c Nexus d Alligator e 5 f 1431807036 g 2 w 17 b 5 console log JSON stringify BAD a
  • 组图模式在 SPARQL 中如何工作

    首先 我不知道这是否真的称为组图模式 反正 请看看这个查询 select x y where x rdf type rs Recommendable union xd rs doesntexist y 有no rs doesntexist但
  • Paramiko:从公钥字符串创建 PKey

    我试图在低级别使用 SSH 协议 即我不想启动 shell 或任何东西 我只想传递数据 因此 我正在使用Paramiko的Transport http www lag net paramiko docs paramiko Transport
  • 乐谱库

    我是一名 Python 黑客 希望构建一个乐谱应用程序 我很擅长阅读 理解乐谱 弹钢琴多年 这是我完整的新手问题 是否有以数字方式表示笔记的标准 我不想重新发明任何轮子 给定一系列音符和持续时间 是否有一个库可以以乐谱格式显示这些内容 基本
  • 为什么我收到 422 错误代码?

    我正在发出 POST 请求 但除了 422 响应之外无法获得任何内容 Vue js 客户端代码 new Vue el app data form companyName street city state zip contactName p
  • iOS:Facebook 聊天头行为和动画

    这个问题可能有点过时了 但我一直在使用新的 iOS 版 Facebook 的 聊天头 功能 聊天头仅出现在应用程序中 并且想知道 Facebook 是如何实现这一点的 例如 他们如何处理聊天头的拖动动画 以及 当单击聊天头时 他们如何设法将
  • 在redux中间件中使用react-router进行重定向

    我创建了一个中间件来检查请求是否返回无效的访问响应 如果状态是 401 我想将用户重定向到登录页面 这是中间件代码 import React from react import push replace from react router