这是我要制作的项目。在本地运行就可以了。但是当我在 package.js 中删除代理并将 .env 设置为将参数传递给 url 时,refresh_token 端点不起作用
这是我的前端代码
export const refreshToken = () => async (dispatch) => {
const firstLogin = localStorage.getItem("firstLogin");
if (firstLogin) {
dispatch({ type: GLOBALTYPES.ALERT, payload: { loading: true } });
try {
const res = await postDataAPI("refresh_token");
console.log(res);
dispatch({
type: GLOBALTYPES.AUTH,
payload: {
token: res.data.access_token,
user: res.data.user,
},
});
dispatch({ type: GLOBALTYPES.ALERT, payload: {} });
} catch (err) {
dispatch({
type: GLOBALTYPES.ALERT,
payload: {
error: err.response.data.msg,
},
});
}
}
};
这是 postData api
import axios from "axios";
const apiUrl = process.env.REACT_APP_API_URL;
export const getDataAPI = async (url, token) => {
const res = await axios.get(`${apiUrl}/api/${url}`, {
headers: { Authorization: token },
});
return res;
};
export const postDataAPI = async (url, post, token) => {
const res = await axios.post(`${apiUrl}/api/${url}`, post, {
headers: { Authorization: token },
});
return res;
};
export const putDataAPI = async (url, post, token) => {
const res = await axios.put(`${apiUrl}/api/${url}`, post, {
headers: { Authorization: token },
});
return res;
};
这是 .env 文件
REACT_APP_API_URL=http://localhost:5000
当我在 package.js 中使用代理的 console.log(rf_token) 时,它具有价值,但是当我传递参数时,它是未定义的
generateAccessToken: async (req, res) => {
try {
const rf_token = req.cookies.refreshtoken;
console.log(rf_token);
if (!rf_token) return res.status(400).json({ msg: "Please login now1." });
jwt.verify(
rf_token,
process.env.REFRESH_TOKEN_SECRET,
async (err, result) => {
if (err) return res.status(400).json({ msg: "Please login now2." });
const user = await Users.findById(result.id)
.select("-password")
.populate(
"followers following",
"avatar username fullname followers following"
);
if (!user)
return res.status(400).json({ msg: "This does not exist." });
const access_token = createAccessToken({ id: result.id });
res.json({
access_token,
user,
});
}
);
} catch (err) {
return res.status(500).json({ msg: err.message });
}
},
};
这是我在后端设置的端点
router.post('/refresh_token', authCtrl.generateAccessToken)
这是 server.js
require("dotenv").config();
const express = require("express");
const mongoose = require("mongoose");
const cors = require("cors");
const cookieParser = require("cookie-parser");
const SocketServer = require("./socketServer");
const { ExpressPeerServer } = require("peer");
const path = require("path");
const app = express();
app.use(express.json());
app.use(cors());
app.use(cookieParser());
// Socket
const http = require("http").createServer(app);
const io = require("socket.io")(http);
io.on("connection", (socket) => {
SocketServer(socket);
});
// Create peer server
ExpressPeerServer(http, { path: "/" });
// Routes
app.use("/api", require("./routes/authRouter"));
app.use("/api", require("./routes/userRouter"));
app.use("/api", require("./routes/postRouter"));
app.use("/api", require("./routes/commentRouter"));
app.use("/api", require("./routes/notifyRouter"));
app.use("/api", require("./routes/messageRouter"));
const URI = process.env.MONGODB_URL;
mongoose.connect(
URI,
{
useCreateIndex: true,
useFindAndModify: false,
useNewUrlParser: true,
useUnifiedTopology: true,
},
(err) => {
if (err) throw err;
console.log("Connected to mongodb");
}
);
if (process.env.NODE_ENV === "production") {
app.use(express.static("client/build"));
app.get("*", (req, res) => {
res.sendFile(path.join(__dirname, "client", "build", "index.html"));
});
}
const port = process.env.PORT || 5000;
http.listen(port, () => {
console.log("Server is running on port", port);
});