Back

Need Help regarding server side authentication/client setup

  • 0
  • Auth
  • Web
  • Cloud
NHero
22 Sep, 2024, 13:37

I have initialised two clients in appwrite one with .setSession() other with .setKey()

. If have to call the function for creating those clients and get something from it like databses, account, user, storage etc I have used these things in many places so i have to call the function in many places and the function will get triggered everytime the page loads but before i had the exports to databses , account, user, storage now will it consume more resources and cost more time , or is there something i can do ?

TL;DR
Developers are managing two clients in Appwrite, one with `.setSession()` and the other with `.setKey()`, used across various parts of the code. To optimize, export the functions that create clients with modules needed. This will avoid multiple initializations and save resources.
NHero
22 Sep, 2024, 13:39

prev code

TypeScript
import env from '@/env';
import { Client, Storage, Databases, Users, Avatars } from 'node-appwrite';

let client = new Client();

client
  .setEndpoint(env.appwrite.endpoint)
  .setProject(env.appwrite.projectId)
  .setKey(env.appwrite.apiKey);
;

const databases = new Databases(client);
const avatars = new Avatars(client);
const storage = new Storage(client);
const users = new Users(client);

export { client, databases, users, avatars, storage };
NHero
22 Sep, 2024, 13:39

current code

TypeScript

import { SESSION_COOKIE } from '@/const';
import env from '@/env';
import { cookies } from 'next/headers';
import { Client, Storage, Databases, Users, Avatars, Account } from 'node-appwrite';

export async function createSessionClient() {
  const client = new Client()
    .setEndpoint(env.appwrite.endpoint)
    .setProject(env.appwrite.projectId);
  
  const session = cookies().get(SESSION_COOKIE);

  if (!session || !session.value) {
    throw new Error("No session found");
  }

  client.setSession(session.value);

  return {
    get account() {
      return new Account(client);
    },
    get storage() {
      return new Storage(client);
    },
    get databases() {
      return new Databases(client);
    },
    get users() {
      return new Users(client);
    },
    get avatars() {
      return new Avatars(client);
    },
  };
}


export async function createAdminClient() {
  const client = new Client()
    .setEndpoint(env.appwrite.endpoint)
    .setProject(env.appwrite.projectId)
    .setKey(env.appwrite.apiKey);
  
  return {
    get account() {
      return new Account(client);
    },
    get storage() {
      return new Storage(client);
    },
    get databases() {
      return new Databases(client);
    },
    get users() {
      return new Users(client);
    },
    get avatars() {
      return new Avatars(client);
    },
  };
}

export async function getLoggedInUser() {
  try {
    const { account } = await createSessionClient()
    return await account.get();
  } catch (err) {
    return null;
  }
}
Reply

Reply to this thread by joining our Discord

Reply on Discord

Need support?

Join our Discord

Get community support by joining our Discord server.

Join Discord

Get premium support

Join Appwrite Pro and get email support from our team.

Learn more