added jwt token

This commit is contained in:
2024-04-19 18:18:07 +07:00
parent ada1af805a
commit 5eda99b443
3 changed files with 37 additions and 7 deletions

View File

@@ -3,4 +3,6 @@ export const Config = {
sms_api_secret: "0957b611d575febff1ae0fc51070c8b7", sms_api_secret: "0957b611d575febff1ae0fc51070c8b7",
sms_api_request_endpoint: "https://otp.thaibulksms.com/v2/otp/request", sms_api_request_endpoint: "https://otp.thaibulksms.com/v2/otp/request",
sms_api_verify_endpoint: "https://otp.thaibulksms.com/v2/otp/verify", sms_api_verify_endpoint: "https://otp.thaibulksms.com/v2/otp/verify",
jwt_secret:
"T4kE6/tIqCVEZYg9lwsqeJjYfOoXTXSXDEMyParsJjj57CjSdkrfPOLWP74/9lJpcBA=",
}; };

View File

@@ -1,6 +1,9 @@
import { initTRPC } from "@trpc/server"; import { initTRPC } from "@trpc/server";
import type { CreateHTTPContextOptions } from "@trpc/server/adapters/standalone"; import type { CreateHTTPContextOptions } from "@trpc/server/adapters/standalone";
import { db } from "./db"; import { db } from "./db";
import * as jwt from "jsonwebtoken";
import { Config } from "./config";
import { z } from "zod";
const t = initTRPC.context<Context>().create(); const t = initTRPC.context<Context>().create();
export const router = t.router; export const router = t.router;
@@ -35,8 +38,10 @@ type Context = Awaited<ReturnType<typeof createContext>>;
export const createContext = async (opts: CreateHTTPContextOptions) => { export const createContext = async (opts: CreateHTTPContextOptions) => {
const authorizationHeader = opts.req.headers.authorization || ""; const authorizationHeader = opts.req.headers.authorization || "";
const bearerToken = authorizationHeader.split(" ")[1]; const bearerToken = authorizationHeader.split(" ")[1];
const phone = verifyToken(bearerToken); console.log(authorizationHeader, bearerToken);
const phone = await verifyToken(bearerToken);
if (phone !== null) { if (phone !== null) {
let user = await db.query.user.findFirst({ let user = await db.query.user.findFirst({
where: (user, { eq }) => eq(user.phone, phone), where: (user, { eq }) => eq(user.phone, phone),
@@ -53,7 +58,28 @@ export const createContext = async (opts: CreateHTTPContextOptions) => {
} }
}; };
function verifyToken(token: string): string | null { async function verifyToken(token: string): Promise<string | null> {
//TODO: Implement token verification try {
return "08999"; let rs = await new Promise((resolve, reject) => {
jwt.verify(token, Config.jwt_secret, (err, decoded) => {
if (err) {
reject(err);
} else {
resolve(decoded);
}
});
});
let data = z
.object({
phone: z.string(),
})
.safeParse(rs);
if (data.success) {
return data.data.phone;
} else {
return null;
}
} catch (e) {
return null;
}
} }

View File

@@ -11,6 +11,7 @@ import { z } from "zod";
import { SQL, eq } from "drizzle-orm"; import { SQL, eq } from "drizzle-orm";
import { Config } from "./config"; import { Config } from "./config";
import { TRPCError } from "@trpc/server"; import { TRPCError } from "@trpc/server";
import * as jwt from "jsonwebtoken";
const userInsertSchema = createInsertSchema(user); const userInsertSchema = createInsertSchema(user);
const opinionInsertSchema = createInsertSchema(userOpinion) const opinionInsertSchema = createInsertSchema(userOpinion)
@@ -157,7 +158,6 @@ async function requestOtp(phone: string) {
async function verifyOtp(token: string, pin: string) { async function verifyOtp(token: string, pin: string) {
try { try {
console.log(token, pin);
let pt = await db.query.phoneToken.findFirst({ let pt = await db.query.phoneToken.findFirst({
where: (pt, { eq }) => eq(pt.token, token), where: (pt, { eq }) => eq(pt.token, token),
orderBy: (pt, { desc }) => desc(pt.createdOn), orderBy: (pt, { desc }) => desc(pt.createdOn),
@@ -189,8 +189,10 @@ async function verifyOtp(token: string, pin: string) {
}); });
} else { } else {
await db.delete(phoneToken).where(eq(phoneToken.phone, pt.phone)); await db.delete(phoneToken).where(eq(phoneToken.phone, pt.phone));
console.log(rs, pt.phone); const token = jwt.sign({ phone: pt.phone }, Config.jwt_secret, {
return rs; expiresIn: "3d",
});
return token;
} }
} catch (e) { } catch (e) {
console.error(e); console.error(e);