How to get longer-lived Identity JWT tokens? Default expiration period is 1hr (3600sec) is too short for me

I am developing Role-based access control with JWT.

I have tried the example code in the following article (‘Usage’ section).

But I found out that the default expiration period is only 3600sec (1hour).

The following image is a Chrome screenshot of localStorage (expires_in: 3600).

1 hour is is too short for my application.

Is there any way to change the expiration period from 1 hour to longer value (for example 1 day, or 1 week).

I have already read the following articles and documents, but I could not find any information related to my topic.

You’ve two ways to go about this:

  1. If you’re on the Business plan, you can set a custom JWT secret. You can use that secret to sign custom JWT tokens with a longer expiration time.

  2. On the lower plans, you have to make use of the ‘refresh_token’. You need to send a request like:

  data: `grant_type=refresh_token&refresh_token=${JSON.parse(localStorage.getItem('gotrue.user')).token.refresh_token}`,
  method: 'post',
  url: ''
}).then(({data}) => {
}).catch(({response: {data}}) => {

save(token) {
  return new Promise((resolve, reject) => {
      headers: {
        authorization: `Bearer ${token.access_token}`
      url: ''
    }).then(({data}) => {
      localStorage.setItem('user', JSON.stringify({,
        token: {
          expires_at: + 3000000
        url: ''
    }).catch(error => {

If you’re using Netlify Identity Widget, I believe this is taken care of automatically, but if you’re using a custom solution, you might have to rely on the above example (also used in a custom solution).