Identidade federada e login social

A autenticação social é um fluxo de autenticação em várias etapas, permitindo que você conecte um usuário a uma conta ou vincule-o a uma conta existente.

Ambas as plataformas nativas e web suportam a criação de uma credencial que pode então ser passada para os métodos signInWithCredential ou linkWithCredential . Alternativamente, em plataformas web, você pode acionar o processo de autenticação por meio de um pop-up ou redirecionamento.

Google

A maior parte das configurações já está configurada ao usar o Login do Google com Firebase, mas você precisa garantir que a chave SHA1 da sua máquina tenha sido configurada para uso com Android. Você pode ver como gerar a chave na documentação de autenticação .

Verifique se o provedor de login "Google" está ativado no Firebase Console .

Se o seu usuário fizer login no Google, após já ter registrado uma conta manualmente, seu provedor de autenticação mudará automaticamente para o Google, devido ao conceito de provedores confiáveis ​​do Firebase Authentications. Você pode descobrir mais sobre isso aqui .

Em plataformas nativas, é necessária uma biblioteca de terceiros para acionar o fluxo de autenticação.

Instale o plugin oficial google_sign_in .

Depois de instalado, acione o fluxo de login e crie uma nova credencial:

import 'package:google_sign_in/google_sign_in.dart';

Future<UserCredential> signInWithGoogle() async {
 
// Trigger the authentication flow
 
final GoogleSignInAccount? googleUser = await GoogleSignIn().signIn();

 
// Obtain the auth details from the request
 
final GoogleSignInAuthentication? googleAuth = await googleUser?.authentication;

 
// Create a new credential
 
final credential = GoogleAuthProvider.credential(
    accessToken
: googleAuth?.accessToken,
    idToken
: googleAuth?.idToken,
 
);

 
// Once signed in, return the UserCredential
 
return await FirebaseAuth.instance.signInWithCredential(credential);
}

Na Web, o SDK do Firebase oferece suporte para lidar automaticamente com o fluxo de autenticação usando seu projeto do Firebase. Por exemplo:

Crie um provedor de autenticação do Google, fornecendo qualquer escopo de permissão adicional que você deseja obter do usuário:

GoogleAuthProvider googleProvider = GoogleAuthProvider();

googleProvider
.addScope('https://www.googleapis.com/auth/contacts.readonly');
googleProvider
.setCustomParameters({
 
'login_hint': 'user@example.com'
});

Forneça a credencial para o método signInWithPopup . Isso acionará uma nova janela solicitando que o usuário faça login no seu projeto. Alternativamente, você pode usar signInWithRedirect para manter o processo de autenticação na mesma janela.

Future<UserCredential> signInWithGoogle() async {
 
// Create a new provider
 
GoogleAuthProvider googleProvider = GoogleAuthProvider();

  googleProvider
.addScope('https://www.googleapis.com/auth/contacts.readonly');
  googleProvider
.setCustomParameters({
   
'login_hint': 'user@example.com'
 
});

 
// Once signed in, return the UserCredential
 
return await FirebaseAuth.instance.signInWithPopup(googleProvider);

 
// Or use signInWithRedirect
 
// return await FirebaseAuth.instance.signInWithRedirect(googleProvider);
}

Jogos do Google Play

Você pode autenticar usuários no seu jogo Android usando o login do Play Games.

Android

Siga as instruções de configuração do Google no Android e configure os serviços do Play Games com as informações do seu aplicativo Firebase .

O seguinte acionará o fluxo de login, criará uma nova credencial e fará login do usuário:

final googleUser = await GoogleSignIn(
  signInOption
: SignInOption.games,
).signIn();

final googleAuth = await googleUser?.authentication;

if (googleAuth != null) {
 
// Create a new credential
 
final credential = GoogleAuthProvider.credential(
    accessToken
: googleAuth.accessToken,
    idToken
: googleAuth.idToken,
 
);

 
// Once signed in, return the UserCredential
  await _auth
.signInWithCredential(credential);
}

Facebook

Antes de começar, configure seu aplicativo de desenvolvedor do Facebook e siga o processo de configuração para ativar o login do Facebook.

Verifique se o provedor de login "Facebook" está ativado no Firebase Console . com o conjunto de ID e segredo do aplicativo do Facebook.

Em plataformas nativas, é necessária uma biblioteca de terceiros para instalar o SDK do Facebook e acionar o fluxo de autenticação.

Instale o plugin flutter_facebook_auth .

Você precisará seguir as etapas na documentação do plug-in para garantir que os SDKs do Facebook para Android e iOS foram inicializados corretamente. Depois de concluído, acione o fluxo de login, crie uma credencial do Facebook e faça login do usuário:

import 'package:flutter_facebook_auth/flutter_facebook_auth.dart';

Future<UserCredential> signInWithFacebook() async {
 
// Trigger the sign-in flow
 
final LoginResult loginResult = await FacebookAuth.instance.login();

 
// Create a credential from the access token
 
final OAuthCredential facebookAuthCredential = FacebookAuthProvider.credential(loginResult.accessToken.token);

 
// Once signed in, return the UserCredential
 
return FirebaseAuth.instance.signInWithCredential(facebookAuthCredential);
}

Na web, o SDK do Firebase oferece suporte para lidar automaticamente com o fluxo de autenticação usando os detalhes do aplicativo do Facebook fornecidos no console do Firebase. Por exemplo:

Crie um provedor do Facebook, fornecendo qualquer escopo de permissão adicional que você deseja obter do usuário.

Certifique-se de que o URI de redirecionamento OAuth do console do Firebase seja adicionado como um URI de redirecionamento OAuth válido em seu aplicativo do Facebook.

FacebookAuthProvider facebookProvider = FacebookAuthProvider();

facebookProvider
.addScope('email');
facebookProvider
.setCustomParameters({
 
'display': 'popup',
});

Forneça a credencial para o método signInWithPopup . Isso acionará uma nova janela solicitando que o usuário faça login em seu aplicativo do Facebook:

Future<UserCredential> signInWithFacebook() async {
 
// Create a new provider
 
FacebookAuthProvider facebookProvider = FacebookAuthProvider();

  facebookProvider
.addScope('email');
  facebookProvider
.setCustomParameters({
   
'display': 'popup',
 
});

 
// Once signed in, return the UserCredential
 
return await FirebaseAuth.instance.signInWithPopup(facebookProvider);

 
// Or use signInWithRedirect
 
// return await FirebaseAuth.instance.signInWithRedirect(facebookProvider);
}

Maçã

Antes de começar, configure Sign In with Apple e habilite a Apple como provedor de login .

Em seguida, certifique-se de que seus aplicativos Runner tenham o recurso “Sign in with Apple”.

Antes de começar, configure Sign In with Apple e habilite a Apple como provedor de login .

Antes de começar, configure Sign In with Apple e habilite a Apple como provedor de login .

import 'package:firebase_auth/firebase_auth.dart';

Future<UserCredential> signInWithApple() async {
 
final appleProvider = AppleAuthProvider();
 
if (kIsWeb) {
    await
FirebaseAuth.instance.signInWithPopup(appleProvider);
 
} else {
    await
FirebaseAuth.instance.signInWithProvider(appleProvider);
 
}
}

Revogar tokens de autenticação da Apple

O login da Apple em plataformas Apple retorna um código de autorização que pode ser usado para revogar o token de autenticação da Apple usando a API revokeTokenWithAuthorizationCode() .

import 'package:firebase_auth/firebase_auth.dart';

Future<UserCredential> signInWithApple() async {
 
final appleProvider = AppleAuthProvider();

 
UserCredential userCredential = await FirebaseAuth.instance.signInWithPopup(appleProvider);
 
// Keep the authorization code returned from Apple platforms
 
String? authCode = userCredential.additionalUserInfo?.authorizationCode;
 
// Revoke Apple auth token
  await
FirebaseAuth.instance.revokeTokenWithAuthorizationCode(authCode!);
}

Microsoft

Antes de começar , configure o Microsoft Login para iOS e adicione os esquemas de URL personalizados ao seu Runner (etapa 1) .

Antes de começar , configure o Login da Microsoft para Android .

Não se esqueça de adicionar a impressão digital SHA-1 do seu aplicativo.

Antes de começar , configure o Microsoft Login for Web .

import 'package:firebase_auth/firebase_auth.dart';

Future<UserCredential> signInWithMicrosoft() async {
 
final microsoftProvider = MicrosoftAuthProvider();
 
if (kIsWeb) {
    await
FirebaseAuth.instance.signInWithPopup(microsoftProvider);
 
} else {
    await
FirebaseAuth.instance.signInWithProvider(microsoftProvider);
 
}
}

Twitter

Certifique-se de que o provedor de login "Twitter" esteja ativado no Firebase Console com uma chave de API e um segredo de API definidos. Certifique-se de que seu URI de redirecionamento do Firebase OAuth (por exemplo, my-app-12345.firebaseapp.com/__/auth/handler) esteja definido como seu URL de retorno de chamada de autorização na página de configurações do seu aplicativo na configuração do seu aplicativo do Twitter .

Talvez você também precise solicitar acesso elevado à API, dependendo do seu aplicativo .

Você precisa configurar seu esquema de URL personalizado conforme descrito na etapa 1 do guia do iOS .

Se você ainda não especificou a impressão digital SHA-1 do seu aplicativo, faça isso na página Configurações do console do Firebase. Consulte Autenticando seu cliente para obter detalhes sobre como obter a impressão digital SHA-1 do seu aplicativo.

Trabalha fora da caixa.

import 'package:firebase_auth/firebase_auth.dart';

Future<void> _signInWithTwitter() async {
 
TwitterAuthProvider twitterProvider = TwitterAuthProvider();

 
if (kIsWeb) {
    await
FirebaseAuth.instance.signInWithPopup(twitterProvider);
 
} else {
    await
FirebaseAuth.instance.signInWithProvider(twitterProvider);
 
}
}

GitHub

Verifique se você configurou um aplicativo OAuth nas configurações do desenvolvedor do GitHub e se o provedor de login "GitHub" está ativado no Firebase Console com o ID do cliente e o segredo definidos, com o URL de retorno de chamada definido no aplicativo GitHub.

Para plataformas nativas, você precisa adicionar google-services.json e GoogleService-Info.plist .

Para iOS, adicione o esquema de URL personalizado conforme descrito na etapa 1 do guia do iOS .

Future<UserCredential> signInWithGitHub() async {
 
// Create a new provider
 
GithubAuthProvider githubProvider = GithubAuthProvider();

 
return await FirebaseAuth.instance.signInWithProvider(githubProvider);
}

Na Web, o SDK do GitHub fornece suporte para lidar automaticamente com o fluxo de autenticação usando os detalhes do aplicativo GitHub fornecidos no console do Firebase. Certifique-se de que o URL de retorno de chamada no console do Firebase seja adicionado como URL de retorno de chamada em seu aplicativo GitHub no console do desenvolvedor.

Por exemplo:

Crie um provedor GitHub e forneça a credencial para o método signInWithPopup . Isso acionará uma nova janela solicitando que o usuário faça login em seu aplicativo GitHub:

Future<UserCredential> signInWithGitHub() async {
 
// Create a new provider
 
GithubAuthProvider githubProvider = GithubAuthProvider();

 
// Once signed in, return the UserCredential
 
return await FirebaseAuth.instance.signInWithPopup(githubProvider);

 
// Or use signInWithRedirect
 
// return await FirebaseAuth.instance.signInWithRedirect(githubProvider);
}

Yahoo

Certifique-se de que o provedor de login "Yahoo" esteja ativado no Firebase Console com uma chave de API e um segredo de API definidos. Verifique também se o URI de redirecionamento do Firebase OAuth (por exemplo, my-app-12345.firebaseapp.com/__/auth/handler) está definido como um URI de redirecionamento na configuração do Yahoo Developer Network do seu aplicativo.

Antes de começar, configure o Yahoo Login para iOS e adicione os esquemas de URL personalizados ao seu Runner (etapa 1) .

Antes de começar, configure o Yahoo Login para Android .

Não se esqueça de adicionar a impressão digital SHA-1 do seu aplicativo.

Trabalha fora da caixa.

import 'package:firebase_auth/firebase_auth.dart';

Future<UserCredential> signInWithYahoo() async {
 
final yahooProvider = YahooAuthProvider();
 
if (kIsWeb) {
    await _auth
.signInWithPopup(yahooProvider);
 
} else {
    await _auth
.signInWithProvider(yahooProvider);
 
}
}

Usando o token de acesso OAuth

Ao usar um AuthProvider, você pode recuperar o token de acesso associado ao provedor fazendo a solicitação a seguir.

final appleProvider = AppleAuthProvider();

final user = await FirebaseAuth.instance.signInWithProvider(appleProvider);
final accessToken = user.credential?.accessToken;

// You can send requests with the `accessToken`

Vinculando um provedor de autenticação

Se você deseja vincular um provedor a um usuário atual, você pode usar o seguinte método: ```dart await FirebaseAuth.instance.signInAnonymously();

final appleProvider = AppleAuthProvider();

if (kIsWeb) { aguarda FirebaseAuth.instance.currentUser?.linkWithPopup(appleProvider);

// Você também pode usar linkWithRedirect } else { await FirebaseAuth.instance.currentUser?.linkWithProvider(appleProvider); }

// Seu usuário anônimo agora foi atualizado para poder se conectar com Sign In With Apple ```

Reautenticar com o provedor

O mesmo padrão pode ser usado com reauthenticateWithProvider , que pode ser usado para recuperar credenciais novas para operações confidenciais que exigem login recente.

final appleProvider = AppleAuthProvider();

if (kIsWeb) {
  await
FirebaseAuth.instance.currentUser?.reauthenticateWithPopup(appleProvider);

 
// Or you can reauthenticate with a redirection
 
// await FirebaseAuth.instance.currentUser?.reauthenticateWithRedirect(appleProvider);
} else {
  await
FirebaseAuth.instance.currentUser?.reauthenticateWithProvider(appleProvider);
}

// You can now perform sensitive operations