Я создаю приложение Next.js, работающее на Node, которое взаимодействует через API с установкой Wordpress, обслуживаемой Apache.Все это SSL.
Вот как я настроил свой виртуальный хост на Apache:
<VirtualHost myproject.test:443>
ServerName myproject.test
DocumentRoot "/Users/myusername/Sites/myproject/backend"
SSLEngine on
SSLCertificateFile "/Users/myusername/Sites/myproject/ssl/server.crt"
SSLCertificateKeyFile "/Users/graziano/Dropbox/myproject/ssl/server.key"
SSLProxyEngine On
ProxyPass /wp-admin !
ProxyPass /wp-login.php !
ProxyPass /index.php !
ProxyPass /wp-json !
ProxyPass / https://myproject.test:3000/
ProxyPassReverse / https://myproject.test:3000/
</VirtualHost>
Созданный мной внешний интерфейс включает в себя форму входа, которая регистрирует пользователя в Wordpress через собственный маршрут API:
// The route itself:
https://myproject.test/wp-json/custom/v1/login?email=admin@myproject.test&password=admin
// The route configuration:
function login() {
register_rest_route( 'custom/v1', '/login', array(
'methods' => 'GET',
'callback' => array( $this, 'login_callback' )
));
}
function login_callback( $req ) {
$userCreds = array(
"user_login" => $req[ 'email' ],
"user_password" => $req[ 'password' ],
);
$userLogin = wp_signon( $userCreds, true );
$userID = $userLogin->ID;
return $userID;
}
Все работает хорошо: когда пользователь входит в систему, используя форму входа, которую я создал в приложении Next.js, вызывается пользовательский маршрут, который корректно устанавливает файл проверки подлинности Wordpress по умолчанию, который выглядит какthis:
wordpress_logged_in_17c62dadff4e171bfa0e0441ae1d0576
Что не работает, так это то, что при установке второго параметра wp_signon
в значение true, как я делал в функции login_callback
, также должен быть установлен безопасный cookie, и он выглядитчто-то вроде этого:
wordpress_sec_17c62dadff4e171bfa0e0441ae1d0576
Но этот файл cookie не устанавливается, и я понятия не имею, почему нет.