Экспресс js перенаправить с cookie, cookie нет - PullRequest
0 голосов
/ 25 января 2019

Итак, я реализовал вход в Facebook с использованием Passport-js.Я также реализовал Cookie-стратегию для использования хорошего имени пользователя и пароля.Моя установка - это Express-js backend и React front-end.Backend и frontend работают на разных серверах и доменах (backend-client.com, frontend-client.com).

Все работает как очарование на localhost, но не на сцене и в производственной среде.Не знаю, имеет ли это значение, но я использую Heroku для размещения своих приложений.

Проблема:

Когда проверка подлинности facebook завершена, сервер Express перенаправляетпользователь веб-приложения.Файл cookie представляет собой JWT, содержащий информацию о пользователе, чтобы проверить, вошел ли пользователь в систему.

const cookieSettings = {
    domain: process.env.COOKIE_DOMAIN,
    secure : (process.env.APP_MODE === 'local' ? false  : true),
    httpOnly : true,
};

const cookieMaxAge = {
    maxAge : 14 * 24 * 60 * 60 * 1000 // 14 days, 24h, 60 min, 60 sec * miliseconds
}

router.get('/auth/facebook/', passport.authenticate('facebook'));
router.get('/auth/facebook/callback', function(req, res, next) {
    passport.authenticate('facebook', async function (err, profile, info) {
        if (err || !profile) {
            res.redirect(`${process.env.FRONTEND_BASE_URL}?success=0`);
        }
        const user = await User.findOne({ facebookId : profile.facebookId });
        return user.generateAuthToken().then((token) => {
            res.cookie(COOKIE_NAME, token.token, {...cookieSettings, ...cookieMaxAge});
            res.redirect(`${process.env.FRONTEND_BASE_URL}?success=1`); // redirect back to frontend-client with cookie
        });
    })(req, res, next);
});

Когда пользователь нажимает / auth / facebook / callback, файл cookie присутствует enter image description here

Однако, когда пользователь возвращается к клиенту веб-интерфейса, в заголовках ответа не отправляются файлы cookie.

Я не могу обернуться вокруг этого.Мне не хватает некоторых основ, касающихся файлов cookie?

cookie is present

Примечание: Когда пользователь входит в систему, используя имя пользователя и пароль,cookie возвращается пользователю.Метод входа в систему создается с помощью ajax-запроса с Axios, если это имеет значение.Так что я знаю, что нет проблем с настройками cookie, которые я использую.

1 Ответ

0 голосов
/ 04 февраля 2019

Итак, примерно через неделю выясняется, что это проблема с доменом Heroku. Я использовал несколько доменов Heroku для своих веб-приложений и приложений бэкэнда (backend.herokuapp.com, frontend.herokuapp.com).

Согласно документации Heroku

Другими словами, в браузерах, которые поддерживают функциональность, приложения в домене herokuapp.com не могут быть настроены куки для * .herokuapp.com

Я решил свою проблему, добавив в мои приложения настраиваемый домен (backend.mycustomdomain.com, frontend.mycustomdomain.com), и файл cookie был добавлен в клиент из ответа сервера

...