当前位置: 首页 > 知识库问答 >
问题:

在onEnter路由上使用auth函数和使用高阶函数,这两种方法真的安全吗?

刘修能
2023-03-14

因此,经过身份验证检查的受保护路由看起来如下所示(假设我们只按需发送路由):

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

    function requireAuth(store) {
        const check = localStorage.jwt
        check ? store.dispatch(push('/dashboard')) : store.dispatch(push('/'))
    }

    export default (store) => ({
      path: 'dashboard',
      onEnter: requireAuth(store),
      getComponent (nextState, cb) {
        require.ensure([], (require) => {
          const Dashboard = require('./containers/DashboardContainer').default
          cb(null, Dashboard)
        }, 'dashboard')
      }
    }) 

为了完成我们的索引路由文件:

    import Login from './login'
    import Dashboard from './Dashboard'
    import Logout from './Logout'

    export const createRoutes = (store) => ({
      path: '/',
      indexRoute: Login,
      childRoutes: [
        Dashboard(store), //Our protected route
        Logout(store)
      ]
    })

    export default createRoutes

在中间放置一个旁观者攻击和继承问题的javascript加密方法的性质,如这里所讨论的:身份验证和会话管理的SPA最佳实践(SPA best practices for authentication and session management

关于每种方法,我还遗漏了哪些其他注意事项?

共有1个答案

江同化
2023-03-14

在我看来,您不应该将JWT令牌存储在localStorage中,而应该将其作为带有httpOnly和安全标志为true的cookie保存。这样客户端脚本就无法获取JWT令牌。此外,中间人攻击也是不可能的,因为您只能在https上发送cookie。

您可以有一个apiendpoint来检查客户机是否有JWT以及它是否有效。以便您可以在需要的任何地方对onEnter函数进行重定向。

编辑

不是真的,如果你有一个无效的令牌,你重定向你的用户到页面,如果这个页面做一些从服务器提取,你会得到401错误,你将不得不检查401错误,以便你可以重定向用户登录。这看起来并不有效也不清楚。

将上面的示例与使用高阶函数包装受保护的组件相比较,这样我们就可以在生命周期方法WillMount和WillRecieveProps中预形成身份验证检查,如您在这里所见。

除了httpOnly标志true Cookie外,所有这些都被公开给客户端。

 类似资料:
  • 我是java / kotlin函数式编程的新手,并做了一些练习。只是想知道如何在调用它时传递lambda的参数。例如,在这里调用一些方法,我需要传递一个Int参数。 如何做到这一点?答案可能非常简单,我只是没有在任何地方找到它,在文档中只有列表的例子,在这种情况下答案是清楚的:

  • Rust 提供了高阶函数(Higher Order Function, HOF)。执行一个或多个函数来产生一个用处更大的函数。HOF 和惰性迭代器(lazy iterator)给 Rust 带来了函数式的风格(英文原文:HOFs and lazy iterators give Rust its functional flavor.)。 fn is_odd(n: u32) -> bool {

  • 高阶函数与普通函数的不同在于,它可以使用一个或多个函数作为参数,可以将函数作为返回值。rust的函数是first class type,所以支持高阶函数。而,由于rust是一个强类型的语言,如果要将函数作为参数或返回值,首先需要搞明白函数的类型。下面先说函数的类型,再说函数作为参数和返回值。 函数类型 前面说过,关键字fn可以用来定义函数。除此以外,它还用来构造函数类型。与函数定义主要的不同是,构

  • 常用高阶函数 1.map 对于原始集合里的每一个元素, 以一个变换后的元素替换之形成一个新的集合 1.1 flatmap 对于元素是集合的集合, 可以得到单级的集合 let results = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] let allResults = results.flatMap{ $0.map{ $0 * 10 } } let passMarks =

  • Haskell 中的函数可以接受函数作为参数也可以返回函数作为结果,这样的函数就被称作高阶函数。高阶函数可不只是某简单特性而已,它贯穿于 Haskell 的方方面面。要拒绝循环与状态的改变而通过定义问题"是什么"来解决问题,高阶函数必不可少。它们是编码的得力工具。 Curried functions 本质上,Haskell 的所有函数都只有一个参数,那么我们先前编那么多含有多个参数的函数又是怎么回

  • 简介 高阶函数(Higher Order Function)是一种以函数为参数的函数。它们都被用于映射(mapping)、过滤(filtering)、归档(folding)和排序(sorting)表。高阶函数提高了程序的模块性。编写对各种情况都适用的高阶函数与为单一情况编写递归函数相比,可以使程序更具可读性。比如说,使用一个高阶函数来实现排序可以使得我们使用不同的条件来排序,这就将排序条件和排序过