HTTPS перенаправить в следующем JS - PullRequest
0 голосов
/ 08 мая 2019

Я пытаюсь сделать перенаправление с http на https, используя next, поэтому, если пользователь заходит на сайт с http://www.example.com перенаправлением на https://www.example.com, я использую GraphQL Yoga на стороне сервера,поэтому не уверен, как я мог бы сделать это в моем файле индекса на стороне сервера.Я попытался использовать метатег и изменить протокол в объекте окна, но мне не повезло с этим при рендеринге на стороне сервера.Есть ли способ, как я могу выполнить это перенаправление на стороне клиента, используя следующий 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}`)
})

1 Ответ

0 голосов
/ 08 мая 2019

То, что я сделал в прошлом, запустил как 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]);
}
...