From c7d81d9848263b30fa8ed564403f019027f4a7d1 Mon Sep 17 00:00:00 2001 From: Gordon Hayes Date: Wed, 25 Aug 2021 18:24:22 +0200 Subject: [PATCH] docs: add generate user tokens with firebase guide --- .../assets/authentication_demo_app.jpg | Bin 0 -> 29335 bytes .../firebase_authentication_dashboard.jpg | Bin 0 -> 54976 bytes .../assets/stream_chat_user_database.jpg | Bin 0 -> 55473 bytes ...er_token_generation_with_firebase_auth.mdx | 448 ++++++++++++++++++ 4 files changed, 448 insertions(+) create mode 100644 docusaurus/docs/Flutter/assets/authentication_demo_app.jpg create mode 100644 docusaurus/docs/Flutter/assets/firebase_authentication_dashboard.jpg create mode 100644 docusaurus/docs/Flutter/assets/stream_chat_user_database.jpg create mode 100644 docusaurus/docs/Flutter/guides/user_token_generation_with_firebase_auth.mdx diff --git a/docusaurus/docs/Flutter/assets/authentication_demo_app.jpg b/docusaurus/docs/Flutter/assets/authentication_demo_app.jpg new file mode 100644 index 0000000000000000000000000000000000000000..eed57c3374d9be8b0b35b9fc0e11e6b12a6d260c GIT binary patch literal 29335 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 literal 0 HcmV?d00001 diff --git a/docusaurus/docs/Flutter/guides/user_token_generation_with_firebase_auth.mdx b/docusaurus/docs/Flutter/guides/user_token_generation_with_firebase_auth.mdx new file mode 100644 index 00000000..a514da01 --- /dev/null +++ b/docusaurus/docs/Flutter/guides/user_token_generation_with_firebase_auth.mdx @@ -0,0 +1,448 @@ +--- +id: token_generation_with_firebase +sidebar_position: 5 +title: User Token Generation With Firebase Auth and Cloud Functions +--- + +Securely generate Stream Chat user tokens using Firebase Authentication and Cloud Functions. + +:::note +This guide assumes that you are familiar with Firebase Authentication and Cloud Functions for Flutter and using the Flutter Stream Chat SDK. +::: + +### Introduction + +In this guide, you'll explore how you can use Firebase Auth as an authentication provider and create Firebase Cloud functions to securely +generate Stream Chat user tokens. + +You will use Stream's [NodeJS client](https://getstream.io/chat/docs/node/?language=javascript) for Stream account creation and +token generation, and [Flutter Cloud Functions for Firebase](https://firebase.flutter.dev/docs/functions/overview) to invoke the cloud functions +from your Flutter app. + +Stream supports several different [backend clients](https://getstream.io/chat/sdk/#backend-clients) to integrate with your server. This guide only shows an easy way to integrate Stream Chat authentication using Firebase and Flutter. + +### Flutter Firebase + +See the [Flutter Firebase getting started](https://firebase.flutter.dev/docs/overview) docs for setup and installation instructions. + +You will also need to add the [Flutter Firebase Authentication](https://firebase.flutter.dev/docs/auth/overview), and [Flutter Firebase Cloud Functions](https://firebase.flutter.dev/docs/functions/overview) packages to your app. Depending on the platform that you target, there may be specific configurations that you need to do. + +#### Starting Code + +The following code shows a basic application with **FirebaseAuth** and **FirebaseFunctions**. + +You will extend this later to execute cloud functions. + +```dart +import 'package:cloud_functions/cloud_functions.dart'; +import 'package:firebase_core/firebase_core.dart'; +import 'package:firebase_auth/firebase_auth.dart'; +import 'package:flutter/material.dart'; +import 'dart:async'; + +Future main() async { + WidgetsFlutterBinding.ensureInitialized(); + await Firebase.initializeApp(); + runApp(MyApp()); +} + +class MyApp extends StatelessWidget { + @override + Widget build(BuildContext context) { + return MaterialApp( + home: Scaffold( + body: Auth(), + ), + ); + } +} + +class Auth extends StatefulWidget { + Auth({Key? key}) : super(key: key); + + @override + _AuthState createState() => _AuthState(); +} + +class _AuthState extends State { + late FirebaseAuth auth; + late FirebaseFunctions functions; + + @override + void initState() { + super.initState(); + auth = FirebaseAuth.instance; + functions = FirebaseFunctions.instance; + } + + final email = 'test@getstream.io'; + final password = 'password'; + + Future createAccount() async { + // Create Firebase account + await auth.createUserWithEmailAndPassword(email: email, password: password); + print('Firebase account created'); + } + + Future signIn() async { + // Sign in with Firebase + await auth.signInWithEmailAndPassword(email: email, password: password); + print('Firebase signed in'); + } + + Future signOut() async { + // Revoke Stream chat token. + final callable = functions.httpsCallable('revokeStreamUserToken'); + await callable(); + print('Stream user token revoked'); + } + + @override + Widget build(BuildContext context) { + return Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + AuthenticationState( + streamUser: auth.authStateChanges(), + ), + ElevatedButton( + onPressed: createAccount, + child: Text('Create account'), + ), + ElevatedButton( + onPressed: signIn, + child: Text('Sign in'), + ), + ElevatedButton( + onPressed: signOut, + child: Text('Sign out'), + ), + ], + ), + ); + } +} + +class AuthenticationState extends StatelessWidget { + const AuthenticationState({ + Key? key, + required this.streamUser, + }) : super(key: key); + + final Stream streamUser; + + @override + Widget build(BuildContext context) { + return StreamBuilder( + stream: streamUser, + builder: (context, snapshot) { + if (snapshot.hasData) { + return (snapshot.data != null) + ? Text('Authenticated') + : Text('Not Authenticated'); + } + return Text('Not Authenticated'); + }, + ); + } +} + +``` + +Running the above will give this: + +![](../assets/authentication_demo_app.jpg) + +The `Auth` widget handles all of the authentication logic. It initializes a `FirebaseAuth.instance` and uses that +in the `createAccount`, `signIn` and `signOut` methods. There is a button to envoke each of these methods. + +The `FirebaseFunctions.instance` will be used later in this guide. + +The `AuthenticationState` widget listens to `auth.authStateChanges()` to display a message +indicating if a user is authenticated. + +### Firebase Cloud Functions + +Firebase Cloud Functions allows you to extend Firebase with custom operations that an event can trigger: +- **Internal event**: For example, when creating a new Firebase account this is automatically triggered. +- **External event**: For example, directly calling a cloud function from your Flutter application. + +To set up your local environment to deploy cloud functions, please see the +[Cloud Functions getting started](https://firebase.flutter.dev/docs/overview) docs. + +After initializing your project with cloud functions, you should have a **functions** folder in your project, including a `package.json` file. + +There should be two dependencies already added, **firebase-admin** and **firebase-functions**. You will also need to add the **stream-chat** dependency. + +Navigate to the **functions** folder and run `npm install stream-chat --save-prod`. + +This will install the node module and add it as a dependency to `package.json`. + +Now open `index.js` and add the following (this is the complete example): + +```js +const StreamChat = require('stream-chat').StreamChat; +const functions = require("firebase-functions"); +const admin = require("firebase-admin"); + +admin.initializeApp(); + +const serverClient = StreamChat.getInstance(functions.config().stream.key, functions.config().stream.secret); + + +// When a user is deleted from Firebase their associated Stream account is also deleted. +exports.deleteStreamUser = functions.auth.user().onDelete((user, context) => { + return serverClient.deleteUser(user.uid); +}); + +// Create a Stream user and return auth token. +exports.createStreamUserAndGetToken = functions.https.onCall(async (data, context) => { + // Checking that the user is authenticated. + if (!context.auth) { + // Throwing an HttpsError so that the client gets the error details. + throw new functions.https.HttpsError('failed-precondition', 'The function must be called ' + + 'while authenticated.'); + } else { + try { + // Create user using the serverClient. + await serverClient.upsertUser({ + id: context.auth.uid, + name: context.auth.token.name, + email: context.auth.token.email, + image: context.auth.token.image, + }); + + /// Create and return user auth token. + return serverClient.createToken(context.auth.uid); + } catch (err) { + console.error(`Unable to create user with ID ${context.auth.uid} on Stream. Error ${err}`); + // Throwing an HttpsError so that the client gets the error details. + throw new functions.https.HttpsError('aborted', "Could not create Stream user"); + } + } +}); + +// Get Stream user token. +exports.getStreamUserToken = functions.https.onCall((data, context) => { + // Checking that the user is authenticated. + if (!context.auth) { + // Throwing an HttpsError so that the client gets the error details. + throw new functions.https.HttpsError('failed-precondition', 'The function must be called ' + + 'while authenticated.'); + } else { + try { + return serverClient.createToken(context.auth.uid); + } catch (err) { + console.error(`Unable to get user token with ID ${context.auth.uid} on Stream. Error ${err}`); + // Throwing an HttpsError so that the client gets the error details. + throw new functions.https.HttpsError('aborted', "Could not get Stream user"); + } + } +}); + +// Revoke the authenticated user's Stream chat token. +exports.revokeStreamUserToken = functions.https.onCall((data, context) => { + // Checking that the user is authenticated. + if (!context.auth) { + // Throwing an HttpsError so that the client gets the error details. + throw new functions.https.HttpsError('failed-precondition', 'The function must be called ' + + 'while authenticated.'); + } else { + try { + return serverClient.revokeUserToken(context.auth.uid); + } catch (err) { + console.error(`Unable to revoke user token with ID ${context.auth.uid} on Stream. Error ${err}`); + // Throwing an HttpsError so that the client gets the error details. + throw new functions.https.HttpsError('aborted', "Could not get Stream user"); + } + } +}); + +``` + +First, you import the necessary packages and call `admin.initializeApp();` to set up Firebase cloud functions. + +Next, you initialize the **StreamChat** server client by calling `StreamChat.getInstance`. This function requires your Stream app's +**token** and **secret**. You can get this from the Stream Dashboard for your app. + +Set these values as environment data on Firebase Functions. + +```bash + firebase functions:config:set stream.key="app-key" stream.secret="app-secret" +``` + +*Replace **app-key** and **app-secret** with the values for your Stream app.* + +This creates an object of **stream** with properties **key** and **secret**. To access this environment +data use `functions.config().stream.key` and `functions.config().stream.secret`. + +See the [Firebase environment configuration](https://firebase.google.com/docs/functions/config-env) +documentation for additional information. + +To deploy these functions to Firebase, run: + +```bash +firebase deploy --only functions +``` + +### Create a Stream User and Get the User's Token + +In the `createStreamUserAndGetToken` cloud function you create an `onCall` HTTPS handler, which exposes +a cloud function that can be envoked from your Flutter app. + +```js +// Create a Stream user and return auth token. +exports.createStreamUserAndGetToken = functions.https.onCall(async (data, context) => { + // Checking that the user is authenticated. + if (!context.auth) { + // Throwing an HttpsError so that the client gets the error details. + throw new functions.https.HttpsError('failed-precondition', 'The function must be called ' + + 'while authenticated.'); + } else { + try { + // Create user using the serverClient. + await serverClient.upsertUser({ + id: context.auth.uid, + name: context.auth.token.name, + email: context.auth.token.email, + image: context.auth.token.image, + }); + + /// Create and return user auth token. + return serverClient.createToken(context.auth.uid); + } catch (err) { + console.error(`Unable to create user with ID ${context.auth.uid} on Stream. Error ${err}`); + // Throwing an HttpsError so that the client gets the error details. + throw new functions.https.HttpsError('aborted', "Could not create Stream user"); + } + } +}); +``` + +This function first does a check to see that the client that calls it is authenticated, +by ensuring that `context.auth` is not null. If it is null, then it throws an `HttpsError` with a descriptive +message. This error can be caught in your Flutter application. + +If the caller is authenticated the function proceeds to use the `serverClient` to create a new Stream Chat +user by calling the `upsertUser` method and passing in some user data. It uses the authenticated caller's **uid** as an **id**. + +After the user is created it generates a token for that user. This token is then returned to the caller. + +To call this from Flutter, you will need to use the `cloud_functions` package. + +Update the **createAccount** method in your Flutter code to the following: + +```dart +Future createAccount() async { + // Create Firebase account + await auth.createUserWithEmailAndPassword(email: email, password: password); + print('Firebase account created'); + + // Create Stream user and get token + final callable = functions.httpsCallable('createStreamUserAndGetToken'); + final results = await callable(); + print('Stream account created, token: ${results.data}'); +} +``` + +Calling this method will do the following: +1. Create a new Firebase User and authenticate that user. +2. Call the `createStreamUserAndGetToken` cloud function and get the Stream user token for the authenticated user. + +As you can see, calling a cloud function is easy and will also send all the necessary user authentication information (such as the UID) +in the request. + +Once you have the Stream user token, you can authenticate your Stream Chat user as you normally would. + +Please see our [initialization documention](https://getstream.io/chat/docs/flutter-dart/init_and_users/?language=dart) for more information. + +As you can see below, the User ID matches on both Firebase's and Stream's user database. + +##### Firebase Authentication Database + +![Firebase Auth Database with new user created](../assets/firebase_authentication_dashboard.jpg) + +##### Stream Chat User Database + +![Stream chat user database new account created](../assets/stream_chat_user_database.jpg) + + +### Get the Stream User Token + +The `getStreamUserToken` cloud function is very similar to the `createStreamUserAndGetToken` function. The only difference is +that it only creates a user token and does not create a new user account on Stream. + +Update the **signIn** method in your Flutter code to the following: + +```dart +Future signIn() async { + // Sign in with Firebase + await auth.signInWithEmailAndPassword(email: email, password: password); + print('Firebase signed in'); + + // Get Stream user token + final callable = functions.httpsCallable('getStreamUserToken'); + final results = await callable(); + print('Stream user token retrieved: ${results.data}'); +} +``` + +Calling this method will do the following: +1. Sign in using Firebase Auth. +2. Call the `getStreamUserToken` cloud function to get a Stream user token. + +:::note +The user needs to be authenticated to call this cloud function. Otherwise, the function will throw +the **failed-precondition** error that you specified. +::: + +### Revoke Stream User Token + +You may also want to revoke the Stream user token if you sign out from Firebase. + +Update the `signOut` method in your Flutter code to the following: + +```dart +Future signOut() async { + // Revoke Stream user token. + final callable = functions.httpsCallable('revokeStreamUserToken'); + await callable(); + print('Stream user token revoked'); + + // Sign out Firebase. + await auth.signOut(); + print('Firebase signed out'); +} +``` +:::note +Call the cloud function before signing out from Firebase. +::: + +### Delete Stream User + +When deleting a Firebase user account, it would make sense also to delete the +associated Stream user account. + +The cloud function looks like this: + +```js +// When a user is deleted from Firebase their associated Stream account is also deleted. +exports.deleteStreamUser = functions.auth.user().onDelete((user, context) => { + return serverClient.deleteUser(user.uid); +}); +``` + +In this function, you are listening to delete events on Firebase auth. When an account is deleted, this function will be triggered, and you can get the +user's **uid** and call the `deleteUser` method on the `serverClient`. + +This is not an external cloud function; it can only be triggered when an +account is deleted. + +### Conclussion + +In this guide, you have seen how to securely create Stream Chat tokens using +Firebase Authentication and Cloud Functions. + +The principles shown in this guide can be applied to your preferred authentication +provider and cloud architecture of choice. \ No newline at end of file