-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathauthOptions.ts
63 lines (54 loc) · 1.67 KB
/
authOptions.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import { env } from "@/env";
import { createCustomer } from "@/use-cases/stripe/create-customer";
import { createUser } from "@/use-cases/user/create-user";
import { AuthOptions } from "next-auth";
import GoogleProvider from "next-auth/providers/google";
import { User } from "./lib/schemas/user";
import { getSubscriptionByUser } from "./use-cases/subscription/get-subscription-by-user";
export const authOptions: AuthOptions = {
providers: [
GoogleProvider({
clientId: env.GOOGLE_CLIENT_ID,
clientSecret: env.GOOGLE_CLIENT_SECRET,
}),
],
pages: {
signIn: "/login",
signOut: "/logout",
},
callbacks: {
async jwt({ token, account, trigger }) {
if (account) {
token.accessToken = account.access_token;
}
if (!token.email) return token;
let user: User | undefined | null = await createUser({
email: token.email,
name: token.name as string,
image: token.picture as string,
});
let planName: string | undefined;
if (user) {
createCustomer(user);
const subscription = await getSubscriptionByUser({ userId: user.id });
planName = subscription?.plan.name;
}
token.id = user?.id;
token.planName = planName;
return token;
},
async session({ session, token }) {
(session as any).accessToken = token.accessToken;
(session as any).user.id = token.id;
(session as any).user.planName = token.planName;
return session;
},
},
events: {
createUser: async ({ user }) => {
const createdUser = await createUser(user as User);
if (!createdUser) return;
createCustomer(createdUser);
},
},
};