Использую node.js + express. При авторизации пользователю выдаю accessToken и refreshToken.
Есть middleware на беке, для теста:
const jwt = require("jsonwebtoken");
require("dotenv").config();
const { tokenValidate } = require("../helpers/validate");
function authMiddleware(req, res, next) {
const authHeader = req.get("Authorization");
if (!authHeader) {
return res.status(400).send({
status: false,
message: "Where is token ?"
});
}
const token = authHeader.replace("Bearer ", "");
let validateData = {
token: token,
secret: process.env.token_secret,
type: "access"
};
const result = tokenValidate(validateData);
console.log(result);
if (result.status && result.message.type === "access") {
next();
}
return res.send({
status: false,
message: result.message
});
}
module.exports = {
authMiddleware
};
И сам роут:
router.post("/test", authMiddleware, (req, res) => {
res.send({
message: "trorlrlrolr"
});
});
Далее на фронте я сделал PrivateRoute:
import React from "react";
import { useContext } from "react";
import { Context } from "../../Context";
import { Redirect, Route } from "react-router-dom";
const PrivateRoute = ({ component: Component, ...rest }) => {
const { state } = useContext(Context);
return (
<Route
{...rest}
render={props =>
state.tokens &&
state.tokens.refreshToken !== "" &&
state.tokens.accessToken !== "" ? (
<Component {...props} />
) : (
<Redirect to="/login" />
)
}
/>
);
};
export default PrivateRoute;
1) Где мне стоит проверять работоспособность токена ? Если я возьму например interceptor и буду смотреть по нему, но на странице например не будет запросов к беку, то получается этот вариант не подходит, верно ?
2) Если будут запросы к беку, мне все проверять через interceptor ? Не совсем понимаю как его использовать в случае с рефреш токеном.