-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathauth.js
76 lines (70 loc) · 2.23 KB
/
auth.js
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
64
65
66
67
68
69
70
71
72
73
74
75
76
import NextAuth from "next-auth";
import { authConfig } from "./auth.config";
import Credentials from "next-auth/providers/credentials";
import { z } from "zod";
import { neon } from "@neondatabase/serverless";
import bcrypt from 'bcryptjs';
export async function getUsers () {
try {
const sql = neon(process.env.DATABASE_URL);
const users = await sql`SELECT * FROM users`;
return users;
} catch (error) {
console.error(error);
return null;
}
}
export async function getUserById (id) {
try {
const sql = neon(process.env.DATABASE_URL);
const user = await sql`SELECT * FROM users WHERE id = ${id}`;
return user[0];
} catch (error) {
console.error(error);
return null;
}
}
export async function getUser (email) {
try {
const sql = neon(process.env.DATABASE_URL);
const user = await sql`SELECT * FROM users WHERE email = ${email}`;
return user[0];
} catch (error) {
console.error(error);
return null;
}
}
export const { handlers, auth, signIn, signOut } = NextAuth({
...authConfig,
providers: [Credentials({
async authorize(credentials) {
const parsedCredentials = z.object({
username: z.string(),
password: z.string(),
}).safeParse(credentials);
if(parsedCredentials.success) {
const user = await getUser(parsedCredentials.data.username);
if(!user) return null;
const passwordMatch = await bcrypt.compare(parsedCredentials.data.password, user.password);
if(passwordMatch) return user;
console.error("Password does not match");
return null;
}
}
})],
callbacks: {
session: async ({session}) => {
console.log(session.user.email);
const user = await getUser(session.user.email);
console.log(user);
session.userData = {
id: user.id,
username: user.username,
email: user.email,
is_verfied: user.is_verified,
robux: user.robux,
}
return session;
}
},
});