Guides - Authentication with Nuxt.js

This guide assumes that you already have installed Liveblocks into your project and that you’re already familiar with Nuxt.js.

Alternatively, you can copy this example and follow the instructions in the README:

Install the Liveblocks package

Run the following command to install Liveblocks package:

npm install @liveblocks/node

@liveblocks/node is used from the backend to setup the authentication endpoint.

Setup authentication endpoint

Users can only interact with rooms they have access to. You can configure permission access by creating a REST endpoint in your Nuxt app. You will implement your own security and define if the current user has access to a specific room.

One way to create an API endpoint in your Nuxt app is to create a server middleware to extend Express. Modify your nuxt.config.js with the following config.

serverMiddleware: [{ path: "/api", handler: "~/api" }];

Then create a file called api.js at the root of your project and add an Express endpoint like below.

import { authorize } from "@liveblocks/node";import express from "express";
// Replace this key with your secret key provided at// https://liveblocks.io/dashboard/projects/{projectId}/apikeysconst secret = "sk_prod_xxxxxxxxxxxxxxxxxxxxxxxx";
const app = express();app.use(express.json());
app.post("/auth", (req, res) => { /** * Implement your own security here. * * It's your responsibility to ensure that the caller of this endpoint * is a valid user by validating the cookies or authentication headers * and that it has access to the requested room. */ authorize({ room: req.body.room, secret: secret, userId: "123", // Optional groupIds: ["456"], // Optional userInfo: { // Optional, corresponds to the UserMeta[info] type defined in liveblocks.config.ts name: "Ada Lovelace", color: "red" }, }) .then((authResponse) => { res.send(authResponse.body); }) .catch((er) => { res.status(403).end(); });});

The userId used in the authorize function corresponds to userId used in our APIs when setting permissions (e.g. in create room). You can use the following example to use data from userId and userInfo on the front end.

const self = useSelf();
// "123"console.log(self.id);
// "red"console.log(self.info.color);
// ...}

Here is a diagram that shows how things work behind the scenes:

Auth diagram

Connect to Liveblocks

To connect to Liveblocks, you need to create a Liveblocks client with [createClient][] from the front-end and set the authEndpoint option based on the path of the endpoint created earlier.

import { createClient } from "@liveblocks/client";
// Create a Liveblocks clientconst client = createClient({ authEndpoint: "/api/auth",});

Liveblocks should now be integrated with your product!

© 2023 Liveblocks Inc.Edit this page