@connect
当我试图在反应组件中访问商店时,效果很好.但是我应该如何在其他一些代码中访问它.例如:假设我想使用授权令牌来创建可以在我的应用程序中全局使用的axios实例,那么最好的方法是什么?
这是我的 api.js
// tooling modules
import axios from 'axios'
// configuration
const api = axios.create()
api.defaults.baseURL = 'http://localhost:5001/api/v1'
api.defaults.headers.common['Authorization'] = 'AUTH_TOKEN' // need the token here
api.defaults.headers.post['Content-Type'] = 'application/json'
export default api
Run Code Online (Sandbox Code Playgroud)
现在我想从我的商店访问一个数据点,如果我试图在反应组件中使用它来获取它,那么这就是 @connect
// connect to store
@connect((store) => {
return {
auth: store.auth
}
})
export default class App extends Component {
componentWillMount() {
// this is how I would get it in my react component
console.log(this.props.auth.tokens.authorization_token)
}
render() {...}
}
Run Code Online (Sandbox Code Playgroud)
那里有任何见解或工作流程模式吗?
最近我需要构建一个简单的 REST API,我阅读了关于最佳实践的不同文章,以尽可能减少我的 Web 应用程序的漏洞。在网上搜索,我找到了关于如何实现 JWT 令牌的不同教程,每个教程在某些方面都不同,我找不到一种节流良好的“通用方法”。最后,我实现了对我来说似乎最合理的解决方案,但我想确认这是处理此类身份验证的最有效方法。
在开始之前:
#STEP 1:认证后生成令牌:
#STEP 2:授权请求
为了授权请求,我只使用在请求标头中的字段中发送的访问令牌。仅当令牌有效时才允许请求。
#STEP 3:刷新访问令牌
为了刷新令牌,我向服务器发送刷新请求。服务器:
有关刷新过程的更多信息
刷新被称为:
进一步的预防措施:关键操作
刷新令牌有两个过期时间。第一个,对于非关键操作,每次发布新令牌时都会刷新。这样,如果用户继续使用该应用程序,他/她可能会永远保持登录状态。对于关键操作,第二个(持续 3 小时)是“绝对的”。这意味着,在每次刷新时,关键操作的“计时器”不会刷新。
//To make it simpler:
nextToken.criticalExpiration=previousToken.criticalExpiration
Run Code Online (Sandbox Code Playgroud)
在“关键”计时器到期后调用刷新请求时,生成的访问令牌有一个字段为 false,表示执行关键操作的选项。如果为 false,则不允许进行关键操作(因此用户必须重新进行身份验证才能执行这些请求)
概括:
我想了解此过程是否正确执行或是否会产生漏洞。我知道在应用程序的其他部分和/或外部库中总是可能存在漏洞,但是,我想尽量减少留下可以被利用的东西的可能性。