'use server'
import { Client, Account } from 'node-appwrite'
import { cookies } from 'next/headers'
const NEXT_PUBLIC_APPWRITE_ENDPOINT = String(process.env.NEXT_PUBLIC_APPWRITE_ENDPOINT)
const NEXT_PUBLIC_APPWRITE_PROJECT = String(process.env.NEXT_PUBLIC_APPWRITE_PROJECT)
const NEXT_APPWRITE_KEY = String(process.env.NEXT_APPWRITE_KEY)
export async function createSessionClient() {
const client = new Client()
.setEndpoint(NEXT_PUBLIC_APPWRITE_ENDPOINT)
.setProject(NEXT_PUBLIC_APPWRITE_PROJECT)
const session = (await cookies()).get('my-custom-session')
if (!session || !session.value) {
throw new Error('No session')
}
client.setSession(session.value)
return {
get account() {
return new Account(client)
},
}
}
export async function createAdminClient() {
const client = new Client()
.setEndpoint(NEXT_PUBLIC_APPWRITE_ENDPOINT)
.setProject(NEXT_PUBLIC_APPWRITE_PROJECT)
.setKey(NEXT_APPWRITE_KEY)
return {
get account() {
return new Account(client)
},
}
}
/signin.action.ts
'use server'
import { createAdminClient } from '@/utils/appwrite/server'
import { cookies } from 'next/headers'
import { redirect } from 'next/navigation'
export async function signinAction(formData: FormData) {
const values = Object.fromEntries(formData.entries())
const email = `${values.email}`
const password = `${values.password}`
const { account } = await createAdminClient()
const session = await account.createEmailPasswordSession(email, password)
;(await cookies()).set('my-custom-session', session.secret, {
path: '/',
httpOnly: true,
sameSite: 'strict',
secure: true,
})
redirect('/')
}