0

Я хочу управлять своей базой данных Firebase непосредственно из почтмана или завитка, используя API Https Rest. Например, используя postman и https: //MY_FIREBASE_DATABSE_URL/users.json, чтобы вернуть пользователей json. Если я установил правила безопасности для общего доступаFirebase HTTP POST аргумент auth

{ 
"rules": { 
".read": true, 
".write": true 
} 

все работает нормально.

Но если установить правила безопасности, которые необходимы разрешение

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

я

{ "Ошибку", "permission_denied"}

Насколько я понимаю, мне нужно для добавления https-запроса с auth = SECURITY_TOKEN. Использование секретного ключа из консоли firebase -> Учетные записи службы для SECURITY_TOKEN не работают, но в любом случае это говорит о том, что секреты базы данных устарели.

Итак, я загружаю генератор токенов для java, указанный здесь https://www.firebase.com/docs/rest/guide/user-auth.html#section-rest-server-authentication.

Я использую следующий код для создания моего маркера

public void actionPerformed(ActionEvent e) { 
    String uid = uidField.getText(); 
    boolean admin = adminField.isSelected(); 
    Map<String, Object> authPayload = new HashMap<String, Object>(); 
    authPayload.put("uid", uid); 
    authPayload.put("some", "arbitrary"); 
    authPayload.put("data", "here"); 

    TokenOptions tokenOptions = new TokenOptions(); 
    tokenOptions.setAdmin(admin); 

    TokenGenerator tokenGenerator = new TokenGenerator(<MY_DATABASE_SECRET>); 
    String token = tokenGenerator.createToken(authPayload, tokenOptions); 
    System.out.println(token); 
    tokenField.setText(token); 
} 

как упомянуто here

где MY_DATABASE_SECRET секретный ключ из firebase консоли упоминалась выше, и UID это идентификатор пользователя из моих пользователей Firebase. Используя этот токен для почтальона, я все еще получаю разрешение.

+0

документации Вы смотрите для устаревшей версии Firebase. Вероятно, ваш проект был создан на новой консоли Firebase. Вы не можете смешивать и сопоставлять версии. Для того, чтобы аутентифицировать вызовы REST с новой версией Firebase, см. Этот ответ: http://stackoverflow.com/a/37444914/209103 от другого сотрудника Firebaser Michael Bleigh. –

+0

То, что я не понимаю в этом сообщении (и я не могу прокомментировать там), - это то, что подразумевается под «вам нужно напрямую использовать учетную запись службы для создания административного доступа», и если мне нужно node.js для нее, или я могу это сделать с Java и как. –

ответ

0

Наконец, внимательно прочитав документацию по firebase, я понял это. То, что мне нужно использовать в качестве токена безопасности для REST API, - это токен маркера безопасности firebase, который я могу получить после того, как я вступил в firebase с другим приложением (ios, android, web), например, для Android со следующим кодом:

FirebaseUser mUser = FirebaseAuth.getInstance().getCurrentUser(); 
    mUser.getToken(true) 
    .addOnCompleteListener(new OnCompleteListener<GetTokenResult>() { 
     public void onComplete(@NonNull Task<GetTokenResult> task) { 
      if (task.isSuccessful()) { 
       String idToken = task.getResult().getToken(); 
       // Send token to your backend via HTTPS 
       // ... 
      } else { 
       // Handle error -> task.getException(); 
      } 
     } 
    }); 

Это токен, который нужно установить для аргумента auth строки запроса.

Для получения полной справки смотрите here

Смежные вопросы