In this series of tutorials, we will create a full-stack Instagram clone app with Draftbit and Xano. At the end of this 3-part tutorial series, you will have built a fully-functional Instagram clone (we’ll call it Picbit) that allows your users to sign up, login, create posts to their profile, and like and comment on other peoples’ posts. This series is divided into three parts:
Draftbit is a visual programming app builder whose interface will build the mobile app with native code running in the background. The app itself is cross-platform and will run on both iOS and Android. We will also use Xano, which is a no-code scalable and secure backend.
In this tutorial, the first part, we will learn how to integrate Xano's REST API interface with Draftbit to implement user authentication. The authenticated user will be able to log-in to the app, see the screens like Feed screen, Profile screen, etc. that are only viewable by the logged-in user and logout of the app.
Here is a little demo of what we are building in this tutorial:
An example of creating a new user account on an iOS simulator using Draftbit.
For this tutorial, we'll be re-using an existing backend for our app. Xano provides a complete backend template that includes API endpoints and data tables to implement features like photo uploading, user profiles, follows, likes, comments, and post feed.
To follow along, you can access this backend template from Xano's marketplace (it's free). Login to your Xano account. From the sidebar, click Marketplace > Featured.
Next, click on the "Install Template" button.
Then, in the popup, click "Install" to install the template.
You can now view the Database tables available in this template by navigating to the "Database" tab from the sidebar. Notice that there are different tables created such as comments, follows photos, user, etc. These database tables will contain the data stored from the Draftbit app. You can ignore the "My First Table" for this tutorial. That's a default database table created by Xano when you set up a backend instance. It won't be used in this tutorial.
Xano's database tables are based on relational model. Therefore, you can view the relationships between different tables. Check "Show Table Relationships" to view the relation of one data table to another.
For this post, the focus will be on the user table. Each new user account created in the Draftbit from a signup screen will be stored as a new user record in Xano.
Xano already comes with pre-filled data inside the user table so you can view how it looks (as shown in the image above).
Authentication verifies a user's identity to provide them access to your mobile application. Inside Draftbit, the process of adding authentication starts with the REST API service. If the REST API service you are using supports user management like Xano, it uses JSON Web Tokens.
The process of authenticating a user typically needs the following steps in a mobile app:
We will implement the functionality for each of the above in Draftbit. Xano will take care of storing the data.
Xano automatically creates necessary API endpoints based on the structure of each database table. In Xano's dashboard, from the sidebar, navigate to the API tab. You will find all the API groups listed here.
Click on the "photo-sharing" API group to view what endpoints the template has already created for us to use.
All the necessary API endpoints are set for this tutorial, so you don't have to create endpoints from scratch. We will use the Auth API sub-group. It has the following endpoints:
Two of these endpoints, /auth/login and /auth/signup are used to retrieve authentication tokens and allow users to create their account and log in to the app. The token received from the endpoint will help us retrieve a user's information from the database table. Hence, this token will allow the user to log in to the app. Almost all endpoints described in the photo-sharing API will require this auth token to send authenticated requests.
An authenticated request from a client to a server (in this case, from the Draftbit app to Xano backend) includes elements of authorization, access rights and checks the identity of the user.
Once you are logged in to your Draftbit account, Create a new project from the Dashboard view.
Provide some details about your application.
As for the demo app, we will choose "Start with a blank app". Allow the project to finish initializing, then click “Start Building”.
You are welcomed by an intuitive and standard-looking design with a "Design" mode. It's the mode where you can layout the components on a screen and uses Flexbox to position each component based on the design of the screen.
Draftbit uses the same Flexbox algorithm as React Native. The algorithm itself is designed to provide consistency among different screen sizes across various devices.
To connect Xano backend in the Draftbit app, a Base URL is required. The Base URL of the REST API is of the format:
https://<your-project-reference>.n7.xano.io/api:<your-api-param>
You can grab this URL from Xano's API dashboard view.
Let's create a REST service that is used throughout the application.
In Draftbit builder, open the API & Cloud Services modal from the top panel. Click on Xano.
You will need to configure two necessary parts: give a name for the API service and add the Base URL copied from Xano.
Draftbit comes with a built-in REST API client to add and test endpoints from an API service.
Once you have saved the service, you need to define endpoints to implement authentication. Each time you create a new endpoint, click the Add Endpoint button from your service interface.
The first endpoint to set up is /auth/signup.
Here is the Body Structure of the sign-up endpoint:
{
"handle": {{signupHandle}},
"name": {{signupName}},
"email": {{signupEmail}},
"password": {{signupPassword}}
}
Let's set up the second endpoint: /auth/login.
Make sure to copy the value of the auth token in the last step. This is because we need it to test the next endpoint.
Here is the Body Structure of the login endpoint:
{
"email": {{signupEmail}},
"password": {{signupPassword}}
}
The last endpoint that needs to be set in the Auth sub-group is /auth/me. This endpoint will get the user's record belonging to the authentication token. That means an authentication token is required to be passed with a Bearer prefix. In Draftbit, this is done by setting up a Device Variable.
A Device variable in Draftbit is available app-wide and is used to store auth tokens. They do not get reset to default values when an app stops running or restarts.
In the above image, we're saving the value of AUTH_TOKEN coming from the previous endpoint. This is because we need a real auth token to test and save the next endpoint in Draftbit. After you've successfully tested the endpoint, you will delete the value of AUTH_TOKEN and leave it blank.
Let's set up the endpoint.
In the above snippet, the value of profile_image is set to null because we are not uploading an image to Xano for a user's profile in the signup process.
Now that the endpoints are set up let's use them in the app screens. The Signup screen allows an app used to create a new account within the app. It is based on a Provider. The most common Provider is email/password. For brevity, we've created a signup screen, as shown below. It is a simple form screen with an app's brand logo, title, multiple input fields, and a button with a solid background to make the API request.
Each input field is composed of a TextInput component. This component in Draftbit contains a Field Name property that contains the name of the value to take a user's input. If a screen contains multiple input fields, for example, as seen in the signup screen above, the value for the Field Name property on each input field must be unique. You can set the value by selecting the TextInput component.
Next, navigate to the Properties panel on the right-hand side and select the Configs tab (second tab).
For example, the handle input field has the following value set on its Field Name property:
For all input fields, here are the values set:
The next step is to bind the API endpoint created earlier to an API request action. Any action in Draftbit is done via a button or a touchable component. If you are familiar with React Native, this is similar to handling a custom function on a Button component using its onPress prop.
The signup screen requires more than one action. Draftbit allows creating a stack of actions where you can define actions as they would happen. It means each action will happen in the order they are defined. Here are the following actions we define for the signup.
The response of one action is used in another action. This is the reason why the order of the actions is important.
The first action sends the API Request to Xano, and on success it comes back with a JSON response. It also binds the input fields values that are sent as key-value pairs in the request's body. You will have to define a unique result name, for example, signupResponse, to the response object coming from the API request.
From the JSON response object, a key and its value from the response body can be extracted. This is exactly what is being done in the second action. We need the value of .authToken coming from Xano, prefixed by the dot notation from the JSON response.
In the next action, assign the authToken value and save it inside the global variable defined earlier. This will allow us to make authenticated requests.
The last action is to navigate to the main app screen, where a logged-in user can access the entire app.
For the demo app, we have a bottom navigator. Draftbit supports two types of navigators: Stack and Bottom Tabs. The user experience in the demo is when a user successfully creates a new account or logs in, and they are navigated to the bottom tabs. Draftbit allows options to structure your own navigation flow, configure each screen inside a navigator, set up an initial route for each navigator, configure icons and labels for each tab, etc.
Here is how our bottom tab navigator looks like.
It has three screens so far:
That's it for setting up a signup screen and actions to make the API request to Xano. The login screen only contains two input fields and contains almost the same set of stacked actions when setting up the API request on the login button.
The only new action here is Conditional Stop which is used to stop the process of login if there is no authToken present in the JSON response of API request.
You can also use this action in the Signup process. Read more about Xano and Draftbit authentication process here.
In this section, we will build a simple profile screen that displays a user's name and handle they entered at the time of signup. Right now, the Profile screen contains two Text components with different styling.
In Draftbit, you can use a Fetch component to bind an API request using the GET HTTP method and fetch the data from your API. For example, in the Profile screen, you will have to fetch the data (user's name and handle) if the user is logged-in to the app. So, click on the “Fetch” component in the Components tree on the left side of the screen.
On the right-hand side, navigate the Data tab in the Properties panel and configure the /auth/me endpoint.
It also shows a preview of the response from the GET request. First, select the Text component in the Components tree. Then, in the Data tab, define a variable, for example, {{name}} inside the double curly braces. Under Variables, from the dropdown, select name.
Similarly, you can define and map the value to display the handle that is coming from Xano to Draftbit's Text component.
To allow a user to log out of the app, we've created a Settings screen (third tab) in the app.
The Logout button in the above screen is created using an Icon Button component from Draftbit. This component is similar to a generic Button component (that you've seen previously). Using the Set Global Variable action, this button sets the value of the auth token global variable as empty ("") to log the user out of the app. Also, after sending the API request, make sure to add a Navigate action to navigate back to the login screen.
So far, we have created all the basic screens required to implement authentication and display data in an authenticated API request. Next, let's run the app by creating a new user account from the signup screen and then navigating to the profile screen to view the user's information. Let's do this in Draftbit's Preview mode.
This tutorial introduces you to how to implement authentication with a no-code tool like Draftbit and a backend using Xano. Tools like Draftbit enable both non-developers and developers to develop apps without the need of coding but using the same paradigms used in open source frameworks like React Native. In the next part of the series, we will dive deeper into how to implement functionalities like uploading a photo, building a feed screen, displaying photos on the feed screen, etc.
In the next part, we will show how to upload images from a device's media library and use a camera on a physical device using No code actions in Draftbit to create an Instagram like post and display a user’s avatar.
If you want to dive deep with Draftbit: