Feat: Add user login / logout
This commit is contained in:
parent
40c451b2c0
commit
ac3cf943f2
32 changed files with 7315 additions and 0 deletions
37
app/lib/jwt.ts
Normal file
37
app/lib/jwt.ts
Normal file
|
@ -0,0 +1,37 @@
|
|||
import { Buffer } from "buffer"
|
||||
import { createHmac } from "crypto"
|
||||
|
||||
const decode = (str: string):string => Buffer.from(str, 'base64').toString('binary');
|
||||
const encode = (str: string):string => Buffer.from(str, 'binary').toString('base64');
|
||||
const secret = process.env.JWT_SECRET ? process.env.JWT_SECRET : ""
|
||||
|
||||
interface tokenData {
|
||||
// eslint-disable-next-line
|
||||
data: any,
|
||||
maxAge: number
|
||||
}
|
||||
|
||||
export function createToken({data, maxAge}: tokenData) {
|
||||
const tokenData = data
|
||||
tokenData.maxAge = maxAge
|
||||
const header = encode(JSON.stringify({"alg":"HS256", "typ":"jwt"}))
|
||||
const body = encode(JSON.stringify(tokenData))
|
||||
const signature = createHmac('sha256',secret).update(header + "." + body).digest('hex')
|
||||
return header + "." + body + "." + signature
|
||||
}
|
||||
|
||||
export function validateToken(token: string) {
|
||||
const rawData = token.split(".")
|
||||
const header = rawData[0]
|
||||
const body = rawData[1]
|
||||
const signature = rawData[2]
|
||||
|
||||
const calculatedSignature = createHmac('sha256',secret).update(header + "." + body).digest('hex')
|
||||
return signature == calculatedSignature
|
||||
}
|
||||
|
||||
export function decryptToken(token: string) {
|
||||
const rawData = token.split(".")
|
||||
const body = rawData[1]
|
||||
return JSON.parse(decode(body))
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue