我尝试确认中间件设置以及 auth.service 和 auth.context,增加接受的标头,并暂时将 CORS 允许的来源扩展到所有 (*)。由于错误不具体,我似乎无法继续前进。
我的终点:
const { isAuthenticated } = require("../middleware/jwt.middleware.js");
router.get("/verify", isAuthenticated, (req, res) => {
console.log(`req.payload`, req.payload);
res.status(200).json(req.payload);
});
我的中间件:
const { expressjwt: jwt } = require("express-jwt");
require("dotenv").config();
const isAuthenticated = jwt({
secret: process.env.TOKEN_SECRET,
algorithms: ["HS256"],
requestProperty: "payload",
credentialsRequired: false,
getToken: getTokenFromHeaders,
});
function getTokenFromHeaders(req) {
if (
req.headers.authorization &&
req.headers.authorization.split(" ")[0] === "Bearer"
) {
const token = req.headers.authorization.split(" ")[1];
return token;
}
return null;
}
module.exports = {
isAuthenticated,
};
在 app.js 上:
app.use((req, res, next) => {
res.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization");
res.setHeader("Access-Control-Allow-Origin", "http://localhost:5173");
res.setHeader(
"Access-Control-Allow-Methods",
"GET, POST, PUT, DELETE, PATCH"
);
next();
});
app.use(isAuthenticated);
在我的 auth.service.js 上(确认我在这里不需要任何参数)
class AuthService {
(...)
verify = () => {
// return axios.post("http://localhost:5005/users/verify");
return this.api.get("/users/verify");
};
}
最后在我的 auth.contextjs 上:(错误从 .verify() 开始,因为它直接记录错误):
const storeToken = (token) => {
localStorage.setItem("authToken", token);
};
const authenticateUser = () => {
const storedToken = localStorage.getItem("authToken");
if (storedToken) {
authService
.verify()
.then((response) => {
(...)
修好了! 验证端点是
POST
而不是 GET