Permita que os usuários se autentiquem com o Firebase usando provedores OAuth, como o Yahoo. Basta integrar o login genérico do OAuth ao seu app usando o SDK do Firebase para realizar o fluxo de login completo. Como esse fluxo requer o uso dos SDKs do Firebase baseados em telefone, ele só é aceito nas plataformas da Apple e do Android.
Antes de começar
- Adicione o Firebase ao seu projeto em C++.
- No console do Firebase, abra a seção Autenticação.
- Na guia Método de login, ative o provedor Yahoo.
- Adicione o ID do cliente e a Chave secreta do cliente no console de desenvolvimento às
configurações do provedor:
-
Para registrar um cliente OAuth do Yahoo, siga a documentação do desenvolvedor dessa plataforma sobre como registrar um aplicativo da Web no Yahoo.
Selecione as duas permissões da API OpenID Connect:
profile
eemail
. - Ao registrar apps nesses provedores, registre o domínio
*.firebaseapp.com
do projeto como o domínio de redirecionamento do seu app.
-
- Clique em Salvar.
Acessar a classe firebase::auth::Auth
A classe Auth
é o gateway para todas as chamadas de API.
- Adicione os arquivos de cabeçalho Auth e App:
#include "firebase/app.h" #include "firebase/auth.h"
- No código de inicialização, crie uma
classe
firebase::App
.#if defined(__ANDROID__) firebase::App* app = firebase::App::Create(firebase::AppOptions(), my_jni_env, my_activity); #else firebase::App* app = firebase::App::Create(firebase::AppOptions()); #endif // defined(__ANDROID__)
- Adquira a classe
firebase::auth::Auth
para seufirebase::App
. Há um mapeamento de um para um entreApp
eAuth
.firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
Processar o fluxo de login com o SDK do Firebase
Para processar o fluxo de login com o SDK do Firebase, siga estas etapas:
Crie uma instância de um
FederatedOAuthProviderData
configurado com o ID do provedor apropriado para o Yahoo.firebase::auth::FederatedOAuthProviderData provider_data(firebase::auth::YahooAuthProvider::kProviderId);
Opcional: especifique os parâmetros OAuth personalizados que você quer enviar com a solicitação OAuth.
// Prompt user to re-authenticate to Yahoo. provider_data.custom_parameters["prompt"] = "login"; // Localize to French. provider_data.custom_parameters["language"] = "fr";
Para saber quais parâmetros são aceitos pelo Yahoo, consulte a documentação do OAuth do Yahoo (em inglês). Não é possível transmitir os parâmetros exigidos pelo Firebase com
custom_parameters()
. Esses parâmetros são client_id, redirect_uri, response_type, scope e state.Opcional: especifique escopos adicionais do OAuth 2.0 além de
profile
eemail
que você quer solicitar ao provedor de autenticação. Se o aplicativo exigir acesso a dados particulares de usuários das APIs do Yahoo, será necessário solicitar permissões às APIs em Permissões de APIs no console de desenvolvimento do Yahoo. Os escopos do OAuth solicitados precisam corresponder exatamente àqueles pré-configurados nas permissões da API do app. Por exemplo, se o acesso de leitura/gravação for solicitado aos contatos do usuário e pré-configurado nas permissões da API do app, será necessário transmitirsdct-w
em vez do escopo somente leiturasdct-r
do OAuth. Caso contrário, o fluxo falhará e um erro será mostrado ao usuário final.// Request access to Yahoo Mail API. provider_data.scopes.push_back("mail-r"); // This must be preconfigured in the app's API permissions. provider_data.scopes.push_back("sdct-w");
Para saber mais, consulte a documentação do escopo do Yahoo (em inglês).
Depois de configurar os dados do provedor, use-os para criar um FederatedOAuthProvider.
// Construct a FederatedOAuthProvider for use in Auth methods. firebase::auth::FederatedOAuthProvider provider(provider_data);
Autentique-se com o Firebase usando o objeto de provedor Auth. Ao contrário de outras operações do FirebaseAuth, isso assumirá o controle da IU exibindo uma visualização da Web na qual o usuário pode inserir as credenciais.
Para iniciar o fluxo de login, chame
SignInWithProvider
:firebase::Future<firebase::auth::AuthResult> result = auth->SignInWithProvider(provider_data);
Seu aplicativo pode aguardar ou registrar um callback no Future.
Embora os exemplos acima se concentrem nos fluxos de login, você também pode vincular um provedor do Yahoo a um usuário existente usando
LinkWithProvider
. Por exemplo, vincule vários provedores ao mesmo usuário permitindo o login com qualquer um deles.firebase::Future<firebase::auth::AuthResult> result = user.LinkWithProvider(provider_data);
É possível usar o mesmo padrão com
ReauthenticateWithProvider
, que pode ser utilizado para recuperar credenciais novas de operações confidenciais que exigem um login recente.firebase::Future<firebase::auth::AuthResult> result = user.ReauthenticateWithProvider(provider_data);
Seu aplicativo pode aguardar ou registrar um callback no Future.
Próximas etapas
Depois que um usuário faz login pela primeira vez, uma nova conta de usuário é criada e vinculada às credenciais, que podem ser o número do telefone, o nome de usuário e a senha ou as informações do provedor de autenticação. Essa nova conta é armazenada como parte do projeto do Firebase e pode ser usada para identificar um usuário em todos os apps do projeto, seja qual for o método de login utilizado.
-
Nos seus apps, use o objeto
firebase::auth::User
para receber as informações básicas de perfil do usuário.firebase::auth::User user = auth->current_user(); if (user.is_valid()) { std::string name = user.display_name(); std::string email = user.email(); std::string photo_url = user.photo_url(); // The user's ID, unique to the Firebase project. // Do NOT use this value to authenticate with your backend server, // if you have one. Use firebase::auth::User::Token() instead. std::string uid = user.uid(); }
Nas Regras de segurança Firebase Realtime Database e Cloud Storage, você pode acessar o ID exclusivo do usuário conectado pela variável
auth
e usar essas informações para controlar quais dados um usuário pode acessar.
Os usuários podem fazer login no app usando vários provedores de autenticação. Basta vincular as credenciais desses provedores a uma conta de usuário.
Para desconectar um usuário, chame
SignOut()
:
auth->SignOut();