首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >验证令牌JWT是否有效

验证令牌JWT是否有效
EN

Stack Overflow用户
提问于 2018-06-09 03:09:13
回答 1查看 1.9K关注 0票数 0

我正在使用Slim框架来开发后端。但是我找不到一种方法来比较我的登录函数生成的令牌:

public function login($request, $response){
    $key = $this->container['key'];
    $email = $request->getParsedBody()['email'];
    $senha = $this->salt . $request->getParsedBody()['senha'];

    $usuario = $this->em->getRepository(UsuarioEntity::class)->findOneBy(['email' => $email]);

    if(empty($usuario) || !password_verify($senha, $usuario->getSenha())) {
      return $response->withJson('Usuario sem permissão de acesso', 401);
    }

    $token = array(
      "session" => password_hash($usuario->getId() . 'f*u87', PASSWORD_BCRYPT),
      "id" => $usuario->getId(),
      "iat" => time(),
      "exp" => time() + (60 * 10)
    );

    $jwt = \Firebase\JWT\JWT::encode($token, $key);
    return $response->withJson($jwt, 200);
}

在前端(React),我调用一个处理所有请求的JS类。我获取并存储了令牌值,但我不知道如何使用它来检查用户是否登录

Requisition.js

axiosPost(funcao,dados){
    //A AUTENTICAÇÃO VAI AQUI
    return axios.post(config.urlBase + funcao, dados);
}

setToken(token){
    this.token = token;
}

getToken(){
    return this.token;
}

LoginEmpresa.js(React组件)

login(){
    var reqAxios = new Requisicoes();
    reqAxios.axiosPost('login',{ email: this.state.email, senha: this.state.senha }).then(res => {
      if(res.data){
        reqAxios.setToken(res.data);
      }else{
        [...]
      }
    })
}

谢谢

EN

回答 1

Stack Overflow用户

发布于 2018-06-09 03:14:26

由于您的前端是一个React应用程序,因此在登录响应中,您应该将令牌存储在应用程序的状态上。你可以把它放在你的应用程序的主组件上,或者在redux商店里,或者其他任何地方。

考虑将JWT存储在localStorage上也很好,这样可以确保用户在应用程序的多个选项卡之间保持登录。

如果您使用的是JWT协议,那么您应该配置您的axios实例来发送内含令牌的Authorization HTTP报头。我在你提供的代码片段中看不到它

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50767042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档