处理对安全路由做出反应的访问令牌的正确方法是什么?

时间:2019-12-28 20:35:35

标签: reactjs react-router

我有一个快速后端,登录时会返回访问令牌作为响应,并刷新令牌作为cookie

    for (int i = 0; i < colunas; ++i)
    {
        cout << endl << "Coluna " << i + 1 << endl;

        vector<Fraction> temp;
        for (int j = 0; j < linhas; ++j)
        {
            int x;
            cin >> x;

            temp.push_back(Fraction(x,1));
        }
        mat.push_back(temp);

        cout << endl;
    }

要点是,我需要在我的反应前端中有一个类似于Authservice的东西,以检查该访问令牌是否有效,它应该返回类似的内容。如果访问令牌有效,则为true;如果访问令牌无效,则为false,基于此,它将允许访问我在我的响应前端中拥有的不同路由。 (我想尽可能在​​交换机中实现它)

我应该如何处理?

我记得在Angular中使用auth Guard方法,但是由于我是新来的人,所以我不确定 我曾经在canActivate具有true或false值的地方做过这样的事情:

      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'
    })
}

在我的反应中,SO作为伪代码应该看起来像这样:

    ...
import { RoleGuard } from '../guards/role-guard.service';
...
children:[
   ...,
  {
    path: 'admin',
    component: AdminComponent,
    canActivate: [RoleGuard],
    data: {role: 'Admin'}
  },
  ...
];

但是从那开始。我应该如何使用前端检查返回的访问令牌是否有效? (我通过刷新令牌获得它们)既然不是应该在后端发生?因为解密令牌的秘密在后端,所以我不知道如何在前端检查它。

1 个答案:

答案 0 :(得分:1)

根据您的方法,您可以执行以下操作:

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>
);