В настоящее время я создаю небольшой чат, используя Firebase и PHP. Я подумал, что это будет хороший обучающий проект для Firebase, и пока я им очень доволен!
Однако я наткнулся на стену. Я не уверен, как реализовать систему аутентификации в Firebase через PHP. Это довольно конкретно, что мне нужно, чтобы система аутентификации делала:
Чтобы иметь возможность использовать чат, пользователь должен войти в систему, используя мою пользовательскую систему входа в систему php. Затем, как только они войдут в систему, они также аутентифицируются, чтобы иметь возможность читать/писать в чате.
Я не мог понять, как это (если даже) возможно с PHP, используя CURL.
В моей функции __construct
есть следующее:
require('/libs/FirebaseLib.php');
$this->firebase = new fireBase('https://<url>.firebaseio.com');
require('/libs/JWT.php');
require('/libs/FirebaseToken.php');
$tokenGen = new Services_FirebaseTokenGenerator('<firebase-secret>');
$this->authtoken = $tokenGen->createToken(
array(
'id' => $this->userid
)
);
Как мне аутентифицироваться с помощью Firebase, чтобы пользователь мог читать/писать в моем чате и не разрешать неаутентифицированному пользователю читать/писать? Примечание. Я ничего не делал с правилами безопасности Firebase — это часть моего вопроса.
Я просмотрел документацию, может быть, я просто очень толстый, но я не мог найти то, что искал.
Надеюсь, кто-нибудь укажет мне в правильном направлении.
Спасибо!
РЕДАКТИРОВАТЬ: я намеренно не использовал javascript для своего чата, за исключением ajax-вызовов моего php-скрипта, который затем передает его в Firebase после того, как я сделал то, что хочу, с сообщениями пользователя.
EDIT 2: добавлены ссылки на используемые библиотеки: "Firebase Token Генератор" и "Клиент Firebase PHP"
EDIT 3: Мой текущий код выглядит так: (ссылка)
__construct:
$this->authtoken = JWT::encode(
array(
'admin' => true,
'debug' => true,
'v' => 0,
'iat' => time(),
'd' => array('user' => 'admin')
),
'<secret>',
'HS256'
);
Функция нового сообщения:
$response = $this->firebase->set('/chat.json?auth=' . $this->authtoken, array(
'message' => array(
'username' => 'Test',
'time' => time(),
'string' => 'Hello World!'
)
));
Однако он возвращает: { "error" : "invalid_token: Could not parse auth token." }
. Я в основном хочу получить разрешение как администратор. Я пытался просто использовать секрет Firebase в качестве аутентификации, но он возвращает ту же ошибку.
Правила:
{
"rules": {
".read": "auth.username == 'admin'",
".write": "auth.username == 'admin'"
}
}