我正在尝试使用 next 将 http 重定向到 https, 所以如果用户在 http://www.example.com 进入网站重定向到 https://www.example.com 我在服务器端使用 GraphQL Yoga,所以不确定如何在服务器端的索引文件中完成此操作。 我试过使用元标记并更改窗口对象中的协议(protocol),但在服务器端渲染中没有成功。 有什么方法可以在客户端使用 next js 或在服务器端完成此重定向?
const cookieParser = require('cookie-parser')
const jwt = require('jsonwebtoken')
require('dotenv').config({path: '.env'})
const createServer = require('./createServer')
const db = require('./db')
const sslRedirect = require('heroku-ssl-redirect');
const server = createServer()
//Express middleware to handle cookies
server.express.use(cookieParser())
//decode JWT
server.express.use((req, res, next) => {
const { token } = req.cookies;
if (token) {
const { userId } = jwt.verify(token, process.env.APP_SECRET);
req.userId = userId;
}
next()
})
//Populates user on request
server.express.use(async (req, res, next) => {
if(!req.userId) return next()
const user = await db.query.user({
where: {id: req.userId}
}, `{id, permissions, email, name}`)
req.user = user
next()
})
//start
server.start({
cors: {
credentials: true,
origin: process.env.FRONTEND_URL
},
}, starting => {
console.log(`server is running on port ${starting.port}`)
})
最佳答案
我过去所做的是使用 express 启动 HTTP 和 HTTPS 服务器。 HTTPS 是配置了所有路由\API 的服务器。 HTTP 服务器只是将所有 GET 请求重定向到 HTTPS。请参阅以下代码,可用于设置 HTTP 服务器以执行重定向。
let httpRedirectServer = express();
// set up a route to redirect http to https
httpRedirectServer.get('*', (request, response) => {
response.redirect('https://' + request.headers.host + request.url);
});
httpRedirectServer.listen(80);
httpRedirectServer.on('listening', () => {
console.log("Listening to redirect http to https");
});
或者在客户端,一个快速修复是通过运行类似的东西在 javascript 中重定向。
// Check the URL starts with 'http://xxxxx' protocol, if it does then redirect to 'https://xxxxx' url of same resource
var httpTokens = /^http:\/\/(.*)$/.exec(window.location.href);
if(httpTokens) {
window.location.replace('https://' + httpTokens[1]);
}
关于javascript - 下一个js中的HTTPS重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56031496/