banking icon indicating copy to clipboard operation
banking copied to clipboard

Error: No session

Open tskxz opened this issue 1 year ago • 0 comments

Cant sign in

appwrite.ts

"use server";

import { Client, Account, Databases, Users } from "node-appwrite";
import { cookies } from "next/headers";

export async function createSessionClient() {
  const client = new Client()
    .setEndpoint(process.env.NEXT_PUBLIC_APPWRITE_ENDPOINT!)
    .setProject(process.env.NEXT_PUBLIC_APPWRITE_PROJECT!);

  try {
    const session = (await cookies()).get("appwrite-session");
    console.log(session)
    if (!session || !session.value) {
      throw new Error("No session");
    }
    client.setSession(session.value);
    return {
      get account() {
        return new Account(client);
      },
    };
  } catch(error){
    console.error('Error:', JSON.stringify(error, null, 2));
  }
  
  
}

export async function createAdminClient() {
  const client = new Client()
    .setEndpoint(process.env.NEXT_PUBLIC_APPWRITE_ENDPOINT!)
    .setProject(process.env.NEXT_PUBLIC_APPWRITE_PROJECT!)
    .setKey(process.env.NEXT_APPWRITE_KEY!);
    
  return {
    get account() {
      return new Account(client);
    },

    get database() {
      return new Databases(client);
    },
    
    get user() {
      return new Users(client);
    }
  };
}

user.actions.ts

'use server';

import { ID } from "node-appwrite";
import { createAdminClient, createSessionClient } from "../appwrite";
import { cookies } from "next/headers";
import { parseStringify } from "../utils";

export const signIn = async ({ email, password }: signInProps) => {
  try {
    const { account } = await createAdminClient();

    const response = await account.createEmailPasswordSession(email, password);

    return parseStringify(response);
  } catch (error) {
    console.error('Error', error);
  }
}

export const signUp = async (userData: SignUpParams) => {
  const { email, password, firstName, lastName } = userData;
  
  try {
    const { account } = await createAdminClient();

    const newUserAccount = await account.create(
      ID.unique(), 
      email, 
      password, 
      `${firstName} ${lastName}`
    );

    const session = await account.createEmailPasswordSession(email, password);

    cookies().set("appwrite-session", session.secret, {
      path: "/",
      httpOnly: true,
      sameSite: "strict",
      secure: true,
    });

    return parseStringify(newUserAccount);
  } catch (error) {
    console.error('Error', error);
  }
}

export async function getLoggedInUser() {
  try {
    const { account } = await createSessionClient();

    const user = await account.get();

    return parseStringify(user);
  } catch (error) {
    console.log(error)
    return null;
  }
}

export const logoutAccount = async () => {
  try {
    const { account } = await createSessionClient();

    cookies().delete('appwrite-session');

    await account.deleteSession('current');
  } catch (error) {
    return null;
  }
}

In the console, I got the following error Error: Cannot destructure property 'account' of '(intermediate value)' as it is undefined.

I also tried to log the session object

{
    "name": "appwrite-session",
    "value": ""
}

tskxz avatar Nov 13 '24 20:11 tskxz