2013-04-11 5 views
2

현재 Firebase와 PHP를 사용하여 작은 대화방을 만들고 있습니다. 이것은 Firebase의 훌륭한 학습 프로젝트가 될 것이라고 생각했으며, 지금까지는 매우 만족합니다!Firebase PHP CURL 인증

그러나 나는 벽에 부딪쳤다. PHP를 통해 인증 시스템을 Firebase에 구현하는 방법을 잘 모르겠습니다. 그것은 인증 시스템이 필요로하는 것에 대해 매우 구체적입니다.

채팅을 사용하려면 사용자는 내 사용자 정의 PHP 로그인 시스템을 사용하여 로그인해야합니다. 그런 다음 일단 로그인하면 채팅에서 읽고 쓸 수 있도록 인증됩니다.

저는 CURL을 사용하여 PHP로 어떻게 가능할 지 이해할 수 없었습니다.

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 
    ) 
); 

나는 사용자가 내 채팅 읽기/쓰기 및 비 인증 된 사용자가 읽을 수 없습니다 할 수 있도록 중포 기지로 인증 할 방법/쓰기 : 다음이 내 __construct 기능에

? 참고 : Firebase 보안 규칙을 수행하지 않았습니다. 이는 제 질문의 일부입니다.

설명서를 살펴본 결과 매우 두꺼울 수도 있지만 실제로 찾고있는 것을 찾을 수 없었습니다.

누구든지 올바른 방향으로 나를 가리 키길 바랍니다.

감사합니다.

편집 : 나는 내가 사용자의 메시지를 수행 할 작업을 수행 한 후 다음 중포 기지로 중계 내 PHP 스크립트에 아약스 통화에서 떨어져, 내 채팅 자바 스크립트를 사용하고 의도적으로하지 않았습니다.

는 편집 2 : 사용 된 라이브러리에 추가 링크 : "Firebase Token Generator"와 "Firebase PHP Client"

편집 3 : (reference)

__construct : 나의 현재 코드는 다음과 같습니다

$this->authtoken = JWT::encode(
    array(
     'admin' => true, 
     'debug' => true, 
     'v' => 0, 
     'iat' => time(), 
     'd' => array('user' => 'admin') 
    ), 
    '<secret>', 
    'HS256' 
); 

새 M essage 기능 :

$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 secret을 인증으로 사용하려고 시도했지만 그 오류는 동일한 오류를 반환합니다.

규칙 :

{ 
    "rules": { 
    ".read": "auth.username == 'admin'", 
    ".write": "auth.username == 'admin'" 
    } 
} 

답변

1

일반적인 작업이 될 것이다 : 사용자가 사용자 정의 로그인 시스템으로 인증 된

  1. 후, 서버 측 PHP 코드에서 중포 기지 인증 토큰을 생성합니다. (붙여 넣은 코드 스 니펫을 가지고있는 것처럼 보입니다.)
  2. 해당 토큰을 다시 클라이언트로 전달하십시오.
  3. 클라이언트가 firebase.auth (< 토큰 >)를 호출하게하십시오. 서버 생성 토큰을 사용하여 Firebase에 인증합니다.
  4. 보안 규칙을 사용하여 인증 토큰의 내용에 따라 클라이언트가 읽고 쓸 수있는 것을 제한하십시오. 당신은 단지 그들이가 인증하는 경우 모든 중포 기지 액세스를 허용 할 간단한 시나리오의

처럼 그냥 보안 규칙을 할 수 :

{ 
    "rules": { 
     ".read": "auth != null", 
     ".write": "auth != null" 
    } 
} 

이 줄 인증 된 사용자에 대한 읽기/쓰기 액세스 권한을 것입니다 전체 Firebase. Firebase의 특정 부분에 읽기/쓰기 권한 만 부여하면됩니다. Security Quickstart에서 인증 및 보안 규칙 작동 방법을 확인하십시오.

이 방법이 도움이되지 않는다면 어쩌면 어떤 부분에서 어려움을 겪고 있는지 자세히 설명 할 수 있습니다.

+0

감사합니다. Michael, 나는 방금 그걸 얻었습니다. - 어떻게 firebase를 할 수 있을까요 .auh (); PHP를 사용/컬? 나는 이것이 JS로 할 수 있다는 것을 알지만 PHP/Curl로 가능합니까? – MrE

+0

아니면 오해 했나요? JS를 통해 인증을 실행해야합니까? – MrE

+0

firebase.js를 전혀 사용하지 않습니까? 당신이 채팅을 말했을 때, 나는 그것이 우리의 채팅 예제 (https://www.firebase.com/tutorial/#example/chat)와 같다고 생각했지만, 아마도 당신은 뭔가 다른 것을하고 있습니까? 대신 클라이언트에서 REST API를 사용하는 경우 (즉, Ajax GET/PUT을 수행하는 경우) 인증 토큰을 사용할 수 있지만 firebase.auth()를 호출하는 대신? auth = 을 REST 요청에 추가하십시오. –