Connecting Rails Auth to JS Frontend

This post will be following up my previous post on creating a rails backend which supports authorization. There isn’t a lot of code required for completing that task, so understanding what the constituent lines mean and what they accomplish is the crucial takeaway. A lot of the elements in JavaScript used to connect the front and back end should look fairly familiar, and to save on time explaining I will refrain from implementing any styling.


To start out, we will need two files in a new directory, one of them being an index.html and another being a JavaScript file (the name is your choice). In the HTML file, we will want to display a title and a form with two inputs for the username and password along with a button to submit. Feel free to set this up for yourself before continuing, if not, here is what I got:

    <h1>Front End Auth</h1>
<form class="login">
<button type="submit">Login</button>

This will be the result:

We are going to leave the HTML at that, as simple as it is. I want to spend the most time addressing the JavaScript functions here.


First off, we will want to grab the form by the class name and assign to a variable. This looks as such:

const loginForm = document.querySelector('.login')

Now that we have the variable, we want an event listener on this with an action and function passed as arguments. This looks as such, and the function will be typed out and explained in the next step:

loginForm.addEventListener("submit", handleLogin)

Here we are at the final step, the “handleLogin” function. There are a handful of steps we will want to do for this one, in this order:

  • Prevent the page from automatically refreshing when the button is clicked.
  • Grab the information entered within the forms using FormData.
  • Assign an object to a variable with the FormData information.
  • Make a post request to the login route to our backend.
  • Set the token into local storage.
  • Reset the forms.

For those of you brave enough to try this on your own it is totally your call, if not, I will post the way through this below:

function handleLogin(event) {
const loginFormData = new FormData(
const username = loginFormData.get("username")
const password = loginFormData.get("password")
console.log(username, password) const loginBody = { username, password } fetch("http://localhost:3000/login", {
method: "POST",
headers: {
"Content-Type": "application/json"
body: JSON.stringify(loginBody)
}).then(response => response.json())
.then(result => {
localStorage.setItem("token", result.token)

All of this should look fairly familiar, it surely did to me minus the “localStorage” aspect. The setting of the token in this manner is basically just to ensure if a user closes the page that the token will remain on file when it is reopened!

After entering the username and password that I used in the prior article, you can now see in the “Network” tab of the developer tools showing the token and a successful request:

And the console showing the username, password and token:

Pat yourself on the back for connecting these two! Hope you enjoyed and thank you for dropping in :)




Programmer / Artist / Believer

Love podcasts or audiobooks? Learn on the go with our new app.

Recommended from Medium


Collapsing Margin between parent and child

Using lambda@Edge for Server-Side Rendering

React Amsterdam Review — Main track

Why Do We Need Transpilation into JavaScript?

Working with Denojs and Nodejs

Switch vs if…else: A Comparison

Create a Node.js Video Streaming Application

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Lucas Thinnes

Lucas Thinnes

Programmer / Artist / Believer

More from Medium

Functions in JS and its use cases

[Source Code]Vue3 — Utility Function In 5 Minutes

Understanding Docker and Containerization with Real Life examples

Manage JavaScript Environment Variables with dotenv