你好,谢谢你。
我们正在App Engine中运行Node.js / Express应用程序,该应用程序将React前端用作静态文件。某一时刻,用户能够重定向到第三方,以便用户可以登录并授权由该第三方管理的某些数据。我们将重定向URI作为查询字符串中的参数提供给第三方https://www.example.com/api/thirdparty/OAuthCallback。
当用户在第三方上提交授权时,应将其重定向到该URI,该URI是我们处理结果的应用程序中的API端点,然后在后端中,将用户重定向到其仪表板。而是在浏览器中将用户重定向到该URI。
我们知道(我们认为)我们正确地进行了路由,因为我们能够从Postman到达终点并以此方式进行仿真。
问题是,为什么此重定向将转到浏览器而不是后端?
在下面,您会找到我们的服务器入口点(index.js)以及我们期望的到达路线(thirdparty.js)
index.js:
//index.js
import express from "express";
import thirdparty from "./routes/thirdparty";
import httpsRedirect from "./middlewares/https-redirect";
const app = express();
var httpsPort = app.get('https-port');
app.use(httpsRedirect({httpsPort: httpsPort}));
app.set('trust proxy', true);
app.use(bodyParser.json({limit: '50mb'}));
app.use(bodyParser.urlencoded({limit: '50mb', extended: true}));
app.use(express.static(path.join(__dirname, '../build')));
app.use("/api/thirdparty", thirdparty);
app.get("/*", (req, res, next) => {
console.log('new request from: '+req);
res.sendFile(path.join(__dirname, '../build', 'index.html'));
});
app.listen(8080, ()=>console.log('Listening on port 8080'));
thirdparty.js(路线):
// thirdparty.js
import express from "express";
const router = express.Router();
var oauth2 = require('./lib/OAuth2.0')();
router.get('/OAuthCallback', function (req, res) {
console.log("CODE--------------------------- : " + req.query.code);
var params = {
code: req.query.code,
redirect_uri: 'https://www.example.com/api/thirdparty/OAuthCallback'
}
oauth2.authCode.getOAuthToken(params, saveToken);
function saveToken(error, result) {
// do things with the result
res.redirect(process.env.HOST+"/dashboard");
}
});
export default router;