---
title: useAccount
---

import { DocusaurusDoc } from '@freesewing/react/components/Docusaurus'
import { MiniTip } from '@freesewing/react/components/Mini'

<DocusaurusDoc>

The **useAccount** hook provides access to a FreeSewing user's account data in local storage.

Use this hook to tap into the account state that is stored in the browser.

<MiniTip>To load the account data, or update it, refer to the [useBackend](//reference/packages/react/hooks/usebackend/) hook instead.</MiniTip>

## Example

```js
import { useAccount } from '@freesewing/react/hooks/useAccount'

const MyComponent = () => {
  const {
    account,
    admin,
    clearAdmin,
    control,
    impersonate,
    seenuser,
    setAccount,
    setSeenUser,
    setToken,
    signOut,
    stopImpersonating,
    token
  } = useAccount()

  // ...
}
```

## Return value

Calling the hook returns an object with the following properties:

- [account](#account)
- [admin](#admin)
- [clearAdmin](#clearadmin)
- [control](#control)
- [impersonate](#impersonate)
- [seenUser](#seenuser)
- [setAccount](#setaccount)
- [setSeenUser](#setseenuser)
- [setToken](#settoken)
- [signOut](#signout)
- [stopImpersonating](#stopimpersonating)
- [token](#token)

### account

Holds the account data available in the browser. Below is an example:

```js
{
  id: 1,
  bio: "Hi, my name is Joost 👋\n\n - 🫡  I am the  [benevolent dictator](https://en.wikipedia.org/wiki/Benevolent_dictator_for_life) here at FreeSewing\n - 🧵 I make clothes and shoes\n - 👕 I design sewing patterns\n - 🧑‍💻 I write code\n - 🐘 I am [@joost@freesewing.social](https://freesewing.social/@joost) on Mastodon\n - 🦋 I am [@joost.at](https://bsky.app/profile/joost.at) on Bluesky\n - 📫 My email is joost AT joost DOT at\n - 🙊 I'm an introvert\n - 🦈 My pronouns are he/him or they/them\n - 👻 Joost sounds like Ghost, in case you're wondering\n",
  compare: true,
  consent: 1,
  control: 5,
  createdAt: "2014-01-20T17:10:47.000Z",
  ehash: "8543e38de4652095c51571fb8dc1734eb7b1b736e574176c42e2f954e5e95a50",
  email:"joost@joost.at",
  data: {
    mastodon: "@joost@freesewing.social",
    instagram: "@freesewing_org",
    githubUsername: "joostdecock",
    githubEmail: "joost@joost.at",
    reddit: "j__st",
    website: "https://freesewing.org/"
  },
  ihash: "7bf3d6a154885eb2c4f56e2bf54b3666d8fb634b72c07c971511816ed0298c79",
  imperial: false,
  initial: "joost@decock.org",
  jwtCalls: 13860,
  keyCalls: 16,
  language: "en",
  lastSeen: "2025-05-29T09:47:56.603Z",
  mfaEnabled: true,
  newsletter: true,
  role: "admin",
  status: 1,
  updatedAt: "2025-05-29T09:47:56.604Z",
  username: "joost",
  lusername: "joost",
  passwordType: "v3",
  bestBefore:1748515676626
}
```

### admin

A user with the `admin` role can impersonate another user.
When that happens, this will hold the `account` data of the admin user so it can be restored later.

### clearAdmin

This clears the admin data held in `admin`.

### control

This provides the user's control score.

### impersonate

This method allows users with the `admin` role to impersonate another user.

It takes an object that should hold the entire user's account data as returned from the backend.

### seenUser

This holds the username that was once authenticated in this browser.

It is what allows a _welcome back [seenUser]_ message to be shown even when no user is currently logged in.

### setAccount

This method sets the data held in `account`.

### setSeenUser

This method sets the data held in `seenUser`.

### setToken

This method sets the data held in `token`.

### signOut

This message will remove the account data from the browser.

### stopImpersonating

This method will stop impersonating theuser and restore the `admin` account data to `account`.

### token

This holds the JSON Web Token that is used to authenticate to the FreeSewing backend.

</DocusaurusDoc>

