mirror of
https://github.com/Nezumi-2711/multitenant-ecommerce.git
synced 2026-09-23 04:10:02 +00:00
feat: implement auth states
This commit is contained in:
@@ -1 +0,0 @@
|
||||
export const AUTH_COOKIE = 'payload-token';
|
||||
@@ -1,21 +1,17 @@
|
||||
import { headers as getHeaders, cookies as getCookies } from "next/headers";
|
||||
import { headers as getHeaders } from "next/headers";
|
||||
|
||||
import { TRPCError } from "@trpc/server";
|
||||
import { AUTH_COOKIE } from "@/modules/auth/constants";
|
||||
import { loginSchema, registerSchema } from "@/modules/auth/schemas";
|
||||
import { baseProcedure, createTRPCRouter } from "@/trpc/init";
|
||||
|
||||
import { generateAuthCookie } from "../utils";
|
||||
|
||||
export const authRouter = createTRPCRouter({
|
||||
session: baseProcedure.query(async ({ ctx }) => {
|
||||
const headers = await getHeaders();
|
||||
|
||||
return await ctx.db.auth({ headers });
|
||||
}),
|
||||
logout: baseProcedure.mutation((async () => {
|
||||
const cookies = await getCookies();
|
||||
|
||||
cookies.delete(AUTH_COOKIE);
|
||||
})),
|
||||
register: baseProcedure
|
||||
.input(
|
||||
registerSchema
|
||||
@@ -62,13 +58,10 @@ export const authRouter = createTRPCRouter({
|
||||
})
|
||||
}
|
||||
|
||||
const cookies = await getCookies();
|
||||
cookies.set({
|
||||
name: AUTH_COOKIE,
|
||||
await generateAuthCookie({
|
||||
prefix: ctx.db.config.cookiePrefix,
|
||||
value: data.token,
|
||||
httpOnly: true,
|
||||
path: '/',
|
||||
});
|
||||
})
|
||||
}),
|
||||
login: baseProcedure
|
||||
.input(loginSchema)
|
||||
@@ -88,13 +81,10 @@ export const authRouter = createTRPCRouter({
|
||||
})
|
||||
}
|
||||
|
||||
const cookies = await getCookies();
|
||||
cookies.set({
|
||||
name: AUTH_COOKIE,
|
||||
await generateAuthCookie({
|
||||
prefix: ctx.db.config.cookiePrefix,
|
||||
value: data.token,
|
||||
httpOnly: true,
|
||||
path: '/',
|
||||
});
|
||||
})
|
||||
|
||||
return data;
|
||||
})
|
||||
|
||||
@@ -1,18 +1,19 @@
|
||||
'use client';
|
||||
|
||||
import { toast } from "sonner";
|
||||
import Link from "next/link";
|
||||
import { useRouter } from "next/navigation";
|
||||
import { useForm } from "react-hook-form";
|
||||
import { Poppins } from "next/font/google";
|
||||
import { useMutation, useQueryClient } from "@tanstack/react-query";
|
||||
import { zodResolver } from "@hookform/resolvers/zod";
|
||||
|
||||
import { useTRPC } from "@/trpc/client";
|
||||
import { Button } from "@/components/ui/button";
|
||||
import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form";
|
||||
import { Input } from "@/components/ui/input";
|
||||
import { cn } from "@/lib/utils";
|
||||
import { LoginSchema, loginSchema } from "@/modules/auth/schemas";
|
||||
import { useTRPC } from "@/trpc/client";
|
||||
import { zodResolver } from "@hookform/resolvers/zod";
|
||||
import { useMutation } from "@tanstack/react-query";
|
||||
import { Poppins } from "next/font/google";
|
||||
import Link from "next/link";
|
||||
import { useRouter } from "next/navigation";
|
||||
import { useForm } from "react-hook-form";
|
||||
import { toast } from "sonner";
|
||||
|
||||
const poppins = Poppins({
|
||||
subsets: ['latin'],
|
||||
@@ -22,11 +23,13 @@ const poppins = Poppins({
|
||||
export const SignInView = () => {
|
||||
const router = useRouter();
|
||||
const trpc = useTRPC();
|
||||
const queryClient = useQueryClient();
|
||||
const login = useMutation(trpc.auth.login.mutationOptions({
|
||||
onError: (error) => {
|
||||
toast.error(error.message)
|
||||
},
|
||||
onSuccess: () => {
|
||||
onSuccess: async () => {
|
||||
await queryClient.invalidateQueries(trpc.auth.session.queryFilter())
|
||||
router.push('/');
|
||||
}
|
||||
}));
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
import { cookies as getCookies } from "next/headers";
|
||||
|
||||
interface Props {
|
||||
prefix: string;
|
||||
value: string;
|
||||
}
|
||||
|
||||
export const generateAuthCookie = async ({prefix, value}: Props) => {
|
||||
const cookies = await getCookies();
|
||||
|
||||
cookies.set({
|
||||
name: `${prefix}-token`,
|
||||
value,
|
||||
httpOnly: true,
|
||||
path: '/',
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user