【发布时间】:2020-11-25 16:27:18
【问题描述】:
我正在开发一个全栈 Web 应用程序,使用 React.js 作为前端,Jersey v2.+ 作为后端。我正在使用 JWT 开发用户身份验证。我在后端有一个用于验证 JWT(如果用户通过身份验证)的 POST 方法,如下所示:
@POST
@Path("/profiles/tokenIsValid")
@Produces(MediaType.APPLICATION_JSON)
public Response checkTokenIsValid(ContainerRequestContext requestContext){
try{
Key key = keyGenerator.generateKey();
String token = requestContext.getHeaderString(HttpHeaders.AUTHORIZATION);
if(token == null){
return Response.ok(false).build();
}
Jws<Claims> verified = Jwts.parser().setSigningKey(key).parseClaimsJws(token);
if(verified == null){
return Response.ok(false).build();
}
String username = verified.getBody().getSubject();
User verifyUser = authenticate(username);
if(verifyUser == null){
return Response.ok(false).build();
}
return Response.ok(true).build();
}catch(Exception e){
return Response.status(500, e.getMessage()).build();
}
}
当使用邮递员进行验证时,一切都按预期工作,授权标头中包含登录用户的令牌。如果令牌有效,则返回 true,否则返回 false..
在 App 功能组件的前端,我使用 useEffect 挂钩来检查令牌是否存在。
useEffect(() => {
const checkLoggedIn = async () => {
let token = localStorage.getItem("auth-token");
console.log(token);
if (token === null) {
localStorage.setItem("auth-token", "");
token = "";
}
const tokenRes = await Axios.post("/profiles/tokenIsValid",
null,
{headers: {"Authorization": token}}
);
console.log(tokenRes.data);
};
checkLoggedIn(); }, []);
似乎由于 Axios.post 请求而出现故障。当尝试在后端进行调试同时在前端刷新页面时,什么都没有发生,看起来好像没有对指定路径发出请求。另外,我在 package.json 中使用代理到后端路径,所以我不需要指定整个路径。
【问题讨论】:
标签: reactjs jwt react-hooks jersey jersey-2.0