A autenticação social é um fluxo de autenticação em várias etapas. Com ela, é possível fazer login de um usuário em uma conta ou vinculá-lo a uma existente.
Tanto as plataformas nativas quanto a Web oferecem suporte a criação de uma credencial que pode ser transmitida para os métodos signInWithCredential
ou linkWithCredential
. Como alternativa, em plataformas da Web, é possível acionar o processo de autenticação usando
um pop-up ou redirecionamento.
A maioria das configurações já está definida ao usar o Login do Google com o Firebase, mas você precisa garantir que a chave SHA1 da sua máquina tenha sido configurada para uso com o Android. Veja como gerar a chave na documentação de autenticação.
Verifique se o provedor de login "Google" está ativado no Console do Firebase.
Se o usuário fizer login com o Google, depois de já ter registrado uma conta manualmente, o provedor de autenticação mudará automaticamente para o Google, devido ao conceito de provedores confiáveis do Firebase Authentication. Para saber mais sobre isso, clique aqui.
iOS e Android
Em plataformas nativas, é necessário ter uma biblioteca de terceiros para acionar o fluxo de autenticação.
Instale o plug-in oficial do google_sign_in
.
Depois da instalação, 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);
}
Web
Na Web, o SDK do Firebase oferece suporte para processar automaticamente 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ê queira conseguir 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 ao método signInWithPopup
. Isso acionará a exibição de uma nova janela pedindo que o usuário faça login no seu projeto. Como alternativa, é possível 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);
}
Google Play Games (somente Android)
Verifique se o provedor de login "Play Games" está ativado no console do Firebase. Siga estas instruções para configurar o projeto do Firebase no Play Games.
Siga estas instruções para configurar os serviços do Play Games com o app do Firebase.
Android
Future<void> _signInWithPlayGames() async {
// Get server auth code from 3rd party provider
// See PR description for details on how you might get the server auth code:
// https://github.com/firebase/flutterfire/pull/12201#issue-2100392487
final serverAuthCode = '...';
final playGamesCredential = PlayGamesAuthProvider.credential(
serverAuthCode: serverAuthCode);
await FirebaseAuth.instance
.signInWithCredential(playGamesCredential);
}
Antes de começar, configure seu app de desenvolvimento 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 Console do Firebase com o ID do app e o secret do Facebook.
iOS e Android
Em plataformas nativas, é necessário ter uma biblioteca de terceiros para instalar o SDK do Facebook e acionar o fluxo de autenticação.
Instale o plug-in 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 sejam inicializados corretamente. Quando terminar, acione o fluxo de login, crie uma credencial do Facebook e faça o 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);
}
Web
Na Web, o SDK do Firebase oferece suporte ao processamento automático do fluxo de autenticação usando os detalhes do aplicativo do Facebook fornecidos no Console do Firebase. Por exemplo:
Crie um provedor do Facebook e forneça qualquer escopo de permissão que você queira conseguir do usuário.
Verifique se o URI de redirecionamento OAuth do Console do Firebase foi adicionado como um URI de redirecionamento OAuth válido no seu aplicativo do Facebook.
FacebookAuthProvider facebookProvider = FacebookAuthProvider();
facebookProvider.addScope('email');
facebookProvider.setCustomParameters({
'display': 'popup',
});
Forneça a credencial ao método signInWithPopup
. Isso acionará uma nova
janela que solicita que o usuário faça login no 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);
}
Apple
iOS+
Antes de começar, configure o recurso "Iniciar sessão com a Apple" e ative a Apple como um provedor de login.
Em seguida, confira se os apps Runner
têm o recurso "Iniciar sessão com a Apple".
Android
Antes de começar, configure o recurso "Iniciar sessão com a Apple" e ative a Apple como um provedor de login.
Web
Antes de começar, configure o recurso "Iniciar sessão com a Apple" e ative a Apple como um 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);
}
}
Somente login na plataforma da Apple
O login da Apple em plataformas iOS+ também pode ser feito com o seguinte método:
// Implement a function that generates a nonce. See iOS documentation for how to create a nonce:
// https://firebase.google.com/docs/auth/ios/apple#sign_in_with_apple_and_authenticate_with_firebase
String rawNonce = createNonce();
// Create a SHA-256 hash of the nonce. Consider using the `crypto` package from the pub.dev registry.
String hashSHA256String = createHashSHA256String(rawNonce);
// Use the hash of the nonce to get the idToken. Consider using the `sign_in_with_apple` plugin from the pub.dev registry.
String idToken = await getIdToken();
final fullName = AppleFullPersonName(
familyName: 'Name',
givenName: 'Your',
);
// Use the `rawNonce` and `idToken` to get the credential
final credential = AppleAuthProvider.credentialWithIDToken(
idToken,
rawNonce,
fullName,
);
await FirebaseAuth.instance.signInWithCredential(credential);
Revogar tokens de autenticação da Apple
O login da Apple nas plataformas da Apple retorna um código de autorização que pode ser usado
para revogar o token de autenticação da Apple com 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!);
}
Apple Game Center (somente Apple)
Verifique se o provedor de login "Game Center" está ativado no console do Firebase. Siga estas instruções para configurar o projeto do Firebase no Game Center.
Você precisa fazer login no Game Center antes de emitir uma credencial do Firebase no Game Center e fazer login pelo Firebase. Confira algumas instruções sobre como fazer isso.
iOS+
Future<void> _signInWithGameCenter() async {
final credential = GameCenterAuthProvider.credential();
await FirebaseAuth.instance
.signInWithCredential(credential);
}
Microsoft
iOS+
Antes de começar, configure o login da Microsoft para iOS e adicione os esquemas de URL personalizados ao seu executor (etapa 1).
Android
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 app.
Web
Antes de começar, configure o login da Microsoft para 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);
}
}
Verifique se o provedor de login "Twitter" está ativado no Console do Firebase com uma chave de API e uma chave secreta de API definidas. Em seguida, confira se o URI de redirecionamento do OAuth do Firebase, por exemplo, my-app-12345.firebaseapp.com/__/auth/handler, está definido como o URL da callback de autorização na página de configurações do app Twitter.
Talvez você também precise solicitar acesso elevado à API dependendo do app.
iOS+
Você precisa configurar seu esquema de URL personalizado conforme descrito na etapa 1 do guia para iOS.
Android
Caso você ainda não tenha especificado a impressão digital SHA-1 do seu app, faça isso na página "Configurações" do Console do Firebase. Consulte Como autenticar seu cliente para mais detalhes sobre como conseguir a impressão digital SHA-1 do seu app.
Web
Não é necessário nenhuma configuração adicional.
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 app OAuth nas Configurações do desenvolvedor do GitHub e se o provedor de login "GitHub" está ativado no Console do Firebase com o ID do cliente e o Secret definidos, com o URL de callback definido no app do GitHub.
iOS e Android
Para plataformas nativas, é necessário adicionar google-services.json
e GoogleService-Info.plist
.
Para iOS, adicione o esquema de URL personalizado conforme descrito no guia do iOS na etapa 1.
Future<UserCredential> signInWithGitHub() async {
// Create a new provider
GithubAuthProvider githubProvider = GithubAuthProvider();
return await FirebaseAuth.instance.signInWithProvider(githubProvider);
}
Web
Na Web, o SDK do GitHub fornece suporte para o processamento automático do fluxo de autenticação usando os detalhes do aplicativo do GitHub fornecidos no Console do Firebase. Verifique se o URL de callback no Console do Firebase foi adicionado como um URL de callback no seu aplicativo GitHub no console para desenvolvedores.
Por exemplo:
Crie um provedor do GitHub e forneça a credencial ao método signInWithPopup
. Isso acionará uma nova
janela que solicita que o usuário faça login no seu aplicativo do 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
Verifique se o provedor de login "Yahoo" está ativado no Console do Firebase com uma chave de API e uma chave secreta de API definidas. Verifique também se o URI de redirecionamento do OAuth do Firebase (por exemplo, my-app-12345.firebaseapp.com/__/auth/handler) está definido como um URI de redirecionamento na configuração de rede do seu app para desenvolvedores Yahoo.
iOS+
Antes de começar, configure o login do Yahoo para iOS e adicione os esquemas de URL personalizado ao seu executor (etapa 1).
Android
Antes de começar, configure o login do Yahoo para Android.
Não se esqueça de adicionar a impressão digital SHA-1 do seu app.
Web
Não é necessário nenhuma configuração adicional.
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);
}
}
Como usar o token de acesso do OAuth
Ao usar um AuthProvider, você pode recuperar o token de acesso associado ao provedor fazendo a seguinte solicitação:
final appleProvider = AppleAuthProvider();
final user = await FirebaseAuth.instance.signInWithProvider(appleProvider);
final accessToken = user.credential?.accessToken;
// You can send requests with the `accessToken`
Como vincular um provedor de autenticação
Se você quer vincular um provedor a um usuário atual, use o seguinte método: ```dart await FirebaseAuth.instance.signInAnonymously();
final appleProvider = AppleAuthProvider();
if (kIsWeb) { await FirebaseAuth.instance.currentUser?.linkWithPopup(appleProvider);
// Você também pode usar linkWithRedirect
} else {
await FirebaseAuth.instance.currentUser?.linkWithProvider(appleProvider);
}
// Seu usuário anônimo agora pode fazer login usando o recurso Iniciar sessão com a Apple ```
Reautenticar com o provedor
É possível usar o mesmo padrão com reauthenticateWithProvider
, que pode ser utilizado para recuperar
credenciais novas para operações confidenciais que exigem um 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