reactjs - 处理访问令牌并对安全路由做出反应的正确方法是什么?
问题描述
我有一个快速后端,它在登录时返回一个访问令牌作为响应,并返回一个刷新令牌作为 cookie
const sendAccessToken = (res , req, accesstoken) => {
res.send({
accesstoken,
email: req.body.email
})
}
const sendRefreshToken = (res, refreshtoken) => {
res.cookie("refreshtoken", refreshtoken, {
httpOnly: true,
path: '/refresh_token'
})
}
关键是我需要在我的反应前端有类似于 Authservice 的东西来检查该访问令牌是否有效,它应该返回类似的东西。如果访问令牌有效,则为真,如果访问令牌无效,则为假,基于此,它将允许访问我在反应前端中拥有的不同路由。(如果可能的话,我想将它直接实施到交换机中)
我应该如何处理它?
我记得在 Angular 中使用了身份验证保护方法,但是由于我是新手,因此我不确定我曾经做过这样的事情,其中 canActivate 具有真值或假值:
...
import { RoleGuard } from '../guards/role-guard.service';
...
children:[
...,
{
path: 'admin',
component: AdminComponent,
canActivate: [RoleGuard],
data: {role: 'Admin'}
},
...
];
所以作为我反应中的伪代码,它应该如下所示:
<BrowserRouter>
<Switch>
<Route exact path="/register" render={(props) => <RegisterPage />} />
<Route exact path="/login" render={(props) => <LoginPage />} />
<Route exact path="/" render={(props) => <NewLandingPage {...props} />} />
<Route path="/protectedRoute" canActivate = [Guard] render={(props) => <Prueba {...props} />} />
</Switch>
</BrowserRouter>
但除此之外。我应该如何使用前端检查返回的访问令牌是否有效?(我用刷新令牌获得它们)因为它不应该发生在后端吗?因为解码令牌的秘密在后端,我不知道如何在前端检查它。
解决方案
根据您的方法,您可以执行以下操作:
state = {
isAuthenticated: false,
}
//in render :
return (
<div>
<Router history={history}>
<Switch>
<Route exact path="/login" render={(props) => ((this.state.isAuthenticated) ? <Home {...props}/> : <Login {...props}/>)}/>
<Route exact path="/" render={(props) => ((this.state.isAuthenticated) ? <Home {...props}/> : <Login {...props}/>)}/>
</Switch>
</Router>
</div>
);
推荐阅读
- python - 为什么 Flask 程序运行两次,具有双重对象实例化(无调试模式)?
- facebook - 如何从 url 获取 facebook 页面 id
- python - Numpy:如何从任意长度的小数组构造一个大对角线数组(矩阵)
- python - QueryBadFormed 使用 Uniprot SPARQL 端点
- reactjs - 如何使用组件内的按钮更改选项卡
- python - 根据值列表对 DataFrame 的行进行多重过滤
- python-3.x - 有没有办法解码决策树概率输出?
- android - 在 android 应用程序中进行哪些更改以使其与 Chromebook 兼容?
- python - 如何解决这种类型的错误“ValueError: setting an array element with a sequence”?
- html - 更好的对齐方式——尤其是响应式属性