我正在尝试从我的react应用程序本地连接到Xero Accounting API。我有一个this API调用设置,因此它向后端授权发送一个调用,然后我有一个回调API调用,它将返回一个access_token,我可以使用它来调用数据。
这是我用来调用Xero API的代码
import { useLocation } from "react-router-dom";
import useXero from "../../hooks/useXero";
const SigninToXero: React.FC = () => {
const location = useLocation();
const queryParams = new URLSearchParams(location.search);
const authorizationCode = queryParams.get("code");
const handleAuthorizeClick = () => {
window.location.href = "http://localhost:4000/authorize";
};
return <button onClick={handleAuthorizeClick}>Authorize Xero</button>;
};
export default SigninToXero;
const express = require("express");
const xero = express.Router();
const schemas = require("../models/schemas");
const clientId = "xxx";
const clientSecret = "xxx";
const redirectUri = "http://localhost:4000/callback";
xero.get('/authorize', (_, res) => {
// Redirect users to the Xero authorization endpoint
const authorizeUrl = `https://login.xero.com/identity/connect/authorize?response_type=code&client_id=${clientId}&redirect_uri=${redirectUri}`;
res.redirect(authorizeUrl);
});
xero.get("/callback", async (req, res) => {
const authorizationCode = req.query.code;
// Exchange authorization code for an access token
const tokenResponse = await axios.post(
"https://identity.xero.com/connect/token",
null,
{
params: {
client_id: clientId,
client_secret: clientSecret,
code: authorizationCode,
grant_type: "authorization_code",
redirect_uri: redirectUri,
},
}
);
const accessToken = tokenResponse.data.access_token;
res.send("Access token obtained successfully", accessToken);
});
module.exports = xero;
下面是节点服务器的代码
const express = require("express");
const cors = require("cors");
const bodyParser = require("body-parser");
const router = require("./routes/router");
const xero = require("./routes/xero")
const mongoose = require("mongoose");
require("dotenv/config");
const app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
const corsOptions = {
origin: "*",
credentials: true,
optionSuccessStatus: 200,
};
app.use(cors(corsOptions));
app.use("/", router);
app.use("/", xero)
const dbOptions = { useNewUrlParser: true, useUnifiedTopology: true };
mongoose
.connect(process.env.DB_URI, dbOptions)
.then(() => console.log("DB connected!"))
.catch(err => console.log(err))
const port = process.env.PORT || 4000;
const server = app.listen(port, () => {
console.log(`Server is running on port ${port}`);
});
我期待从API的响应,说“访问令牌成功获得,(访问令牌)”
1条答案
按热度按时间bfhwhh0e1#
Xero的API目前不支持单页应用程序。您将能够连接到Xero组织,但呼叫将无法工作。
https://developer.xero.com/documentation/guides/oauth2/overview/文档提到目前不支持SPA。