2015-02-12 3 views
0

Мы просто устанавливаем наше первое приложение Neo4j 2.1 на серверную среду Jelastic и не можем подключиться к работе db. Простая программа (от ответа в neo4jphp: Cannot instantiate abstract class Everyman\Neo4j\Transport) заключается в следующем:Подключение сервера Neo4j с Neo4jPHP дает 401

require('vendor/autoload.php'); 

use Everyman\Neo4j\Client; 
$client = new Client($Server_ip_address, 8080); 
print_r($client->getServerInfo()); 

Последняя строка выдает ошибку 401 Несанкционированное:

«Не удалось получить информацию о сервере [401]: \ nHeaders: Array
(
[WWW-Authenticate] => Основная сфера = "Neo4j graphdb"
[Content-Type] => текст/html; Charset = ISO-8859-1
[Cache-Control] => нужно обязательно перепроверять , no-cache, no-store
[Content-Length] => 0
[Сервер] => Jetty (9.0.5.v20130815)
)
Body: Array
(
)
.

Должен ли я настраивать user_id/password где-нибудь в моей среде Apache 2.2 или есть что-то еще отсутствует?

Спасибо, в конце концов! рабочая версия это:

require('vendor/autoload.php'); 
use Everyman\Neo4j\Client; 
$client = new Everyman\Neo4j\Client($host, $port); 
$client->getTransport() 
    ->setAuth($username, $password); 
print_r($client->getServerInfo()); 

Также «-> useHttps()» следует использовать, если у вас нет доверенной среды.

+0

Я не нашел примеров того, как должны быть указаны учетные данные, обычно они не выражены. Документы в http://jadell.github.io/neo4jphp/docs/index.html сообщают, что есть функция Transport.setAuth ($ user, $ passwd), но это не очень хорошая идея, чтобы их жестко кодировать. Есть ли другие способы установки учетных данных, например, в php.ini? –

+0

Я попытался использовать метод setAuth, но он терпит неудачу: «Невозможно создать экземпляр абстрактного класса Everyman \\ Neo4j \\ Transport». Я написал '\t $ client = new Client (новый транспорт ('10 .50.8.204 ', 8080) .setAuth (' admin ', $ mypasswd);' –

+0

Вам не нужно создавать новый транспорт. Метод 'setAuth' вызывается в $ client. Вы правы, что никогда не должны жестко указывать учетные данные безопасности в приложении. Вы можете хранить имя пользователя/пароль в любом месте, где обычно хранятся учетные данные, чтобы безопасно читать в ваше приложение: файлы конфигурации, уроки среды Apache и т. Д. –

ответ

1

Если вы используете аутентификацию, вы должны передать имя пользователя/пароль, как показано в примере на https://github.com/jadell/neo4jphp/wiki/Getting-started#testing-your-connection

require('vendor/autoload.php'); 

use Everyman\Neo4j\Client; 
$client = new Client($Server_ip_address, 8080); 
$client->setAuth($username, $password); 
print_r($client->getServerInfo()); 

Кроме того, если вы используете HTTPS (рекомендуется, если вы используете аутентификацию) вам должен также:

$client->useHttps();