Преобразование необработанного куки-файла для принятия кукловодом - PullRequest
0 голосов
/ 17 мая 2018

Я хочу передать сессию из passport.js кукловоду.

Я использовал var cookies = req.cookies; для получения значения куки.

Я console.logged, и это что-то вроде этого:

{ 'connect.sid': 's:qX4ZrttrjydtrjkgsdghsdghrewynZj4Ew2OUh.tTSILkcvgsegsegsegsr99gmW5
0XLcJefM' }

Я думал, что это будет так же просто, как передать это значение кукловоду.

Но кукловод имеет функцию page.setCookie (), формат которой таков:

page.setCookie(...cookies)
...cookies <...Object>
name <string> required
value <string> required
url <string>
domain <string>
path <string>
expires <number> Unix time in seconds.
httpOnly <boolean>
secure <boolean>
sameSite <string> "Strict" or "Lax".
returns: <Promise>

Так как мне передать кукловоду мое печенье? Есть ли способ преобразовать его из исходного значения в то, которое принимает кукловод?

Может быть, это большая строка в моем необработанном cookie, значение, которое нужно передать объекту, который принимает кукловод?

1 Ответ

0 голосов
/ 11 апреля 2019

Если вы работаете в MacOS (к сожалению, в настоящее время я не могу комментировать, чтобы спросить), я тоже довольно долго искал ответ на эту проблему ... и ответ заключается в том, что значение cookie шифруется вашими учетными данными пользователя MacOS вТаблица БД SQL, которую вам необходимо сначала расшифровать с помощью чего-то, что может получить доступ к вашей цепочке для ключей (с вашего разрешения, разумеется).

После расшифровки, часть 2) преобразует это в то, что Puppeteer примет.

Существует пакет NPM, который выполняет первое, но не второе (https://github.com/bertrandom/chrome-cookies-secure),, но я работал над этим, так что теперь он генерирует готовые куки Puppeteer для любого данного профиля Chrome. Существует PRзапрос на него (https://github.com/bertrandom/chrome-cookies-secure/pull/14) - еще не принят - но у меня он работает в реальном приложении в течение месяца.

Добавьте пакет NPM для chrome-cookies-secure в свое приложение, и вы 'Я буду в пути.

Основные моменты создания объекта Puppeteer заключаются в следующем (вы должны увидеть изменения в index.js дляоткрытый PR, плюс пример в README.MD):

// 'cookie' is an array of Objects with keys as written in decrypted SQL DB

let puppeteerCookies = [];

cookies.forEach(function(cookie, index) {
    const puppeteerCookieObject = {
        name: cookie.name,
        value: cookie.value,
        expires: cookie.expires_utc,
        domain: cookie.host_key,
        path: cookie.path
    }
    if (cookie.is_secure) {
        puppeteerCookieObject['Secure'] = true
    }
    if (cookie.is_httponly) {
        puppeteerCookieObject['HttpOnly'] = true
    }
    puppeteerCookies.push(puppeteerCookieObject)
})

return puppeteerCookies;

Надеюсь, это поможет.

...