Как разобрать сессию Node Express из WordPress - PullRequest
0 голосов
/ 14 июня 2019

Есть:

  • WordPress example.domain
  • Node.js Экспресс с Passport.js example.domain/node

Node.js помещает connect.sid в куки

Я могу подтвердить аутентификацию пользователя через res.isAuthenticated, когда пользователь вызывает любой метод из Node.js

Но как проверить аутентификацию пользователя через WordPress?

WordPress отображает страницы как клиент MVC

Node.js работает как REST API

У меня есть несколько идей:

  • Может быть создать пустой метод в Node.js, который возвращает флаг и добавить вызов этого метода API в элементы, когда они загружены?

  • Может быть переместить WP под методом возврата Node.js?

User: I want to example.domain 

Node: Yes, you're authorized and can get WP pages with true-auth flag

User: I want to logout from example.domain

Node: Yes, you're not authorized and can get WP pages with false-auth flag```

1 Ответ

0 голосов
/ 16 июня 2019

Если WP и Node.js были размещены в одном домене, то Cookies содержат в одном месте

Вы можете получить Cookies через $ _COOKIE ["COOKIE NAME HERE"] на WP

Паспорт.js из Node.js содержит session_id в виде файлов cookie с именем connect_sid

Когда вы вызываете любую страницу из WP, вы можете получить в cookie файлы connect_sid и проверить ее на стороне Node.js посредством замены сеанса

Узел (создать маршрут как get):

router.get("/check", function (req, res) {
  res.send(req.isAuthenticated)
})

WP:

function get_auth_state(){
    $cookie = 'Cookie: connect.sid=' . urlencode($_COOKIE["connect_sid"]) . ';';

    $curl = curl_init();

    curl_setopt_array($curl, array(
        CURLOPT_URL => "http://localhost-node-address/check",
        CURLOPT_CUSTOMREQUEST => "GET",
        CURLOPT_HTTPHEADER => array(
            $cookie
        ),
    ));

    $response = curl_exec($curl);
    $err = curl_error($curl);

    curl_close($curl);

    if ($err) {
        return "cURL Error #:" . $err;
    } else {
        return $response;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...