fix: reset password and env vars

This commit is contained in:
Yehoshua Sandler 2025-05-04 20:17:29 -05:00
parent db20a093ef
commit e264e88b39
7 changed files with 32 additions and 34 deletions

View File

@ -1,7 +1,10 @@
DATABASE_URI=postgres://postgres:<password>@127.0.0.1:5432/your-database-name DATABASE_URI=postgres://postgres:<password>@127.0.0.1:5432/your-database-name
PAYLOAD_SECRET=YOUR_SECRET_HERE PAYLOAD_SECRET=YOUR_SECRET_HERE
DOMIAN_NAME= PORT=9889
DOMAIN_NAME=localhost:3000
SERVER_URL=http://localhost:3000
SMTP_HOST= SMTP_HOST=
SMTP_USER= SMTP_USER=

13
package-lock.json generated
View File

@ -12,6 +12,7 @@
"@headlessui/react": "^2.2.1", "@headlessui/react": "^2.2.1",
"@heroicons/react": "^2.2.0", "@heroicons/react": "^2.2.0",
"@hookform/resolvers": "^5.0.1", "@hookform/resolvers": "^5.0.1",
"@next/env": "^15.3.1",
"@payloadcms/db-postgres": "3.31.0", "@payloadcms/db-postgres": "3.31.0",
"@payloadcms/next": "3.31.0", "@payloadcms/next": "3.31.0",
"@payloadcms/payload-cloud": "3.31.0", "@payloadcms/payload-cloud": "3.31.0",
@ -3337,9 +3338,9 @@
} }
}, },
"node_modules/@next/env": { "node_modules/@next/env": {
"version": "15.2.3", "version": "15.3.1",
"resolved": "https://registry.npmjs.org/@next/env/-/env-15.2.3.tgz", "resolved": "https://registry.npmjs.org/@next/env/-/env-15.3.1.tgz",
"integrity": "sha512-a26KnbW9DFEUsSxAxKBORR/uD9THoYoKbkpFywMN/AFvboTt94b8+g/07T8J6ACsdLag8/PDU60ov4rPxRAixw==", "integrity": "sha512-cwK27QdzrMblHSn9DZRV+DQscHXRuJv6MydlJRpFSqJWZrTYMLzKDeyueJNN9MGd8NNiUKzDQADAf+dMLXX7YQ==",
"license": "MIT" "license": "MIT"
}, },
"node_modules/@next/eslint-plugin-next": { "node_modules/@next/eslint-plugin-next": {
@ -12069,6 +12070,12 @@
"react-dom": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc" "react-dom": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc"
} }
}, },
"node_modules/next/node_modules/@next/env": {
"version": "15.2.3",
"resolved": "https://registry.npmjs.org/@next/env/-/env-15.2.3.tgz",
"integrity": "sha512-a26KnbW9DFEUsSxAxKBORR/uD9THoYoKbkpFywMN/AFvboTt94b8+g/07T8J6ACsdLag8/PDU60ov4rPxRAixw==",
"license": "MIT"
},
"node_modules/next/node_modules/postcss": { "node_modules/next/node_modules/postcss": {
"version": "8.4.31", "version": "8.4.31",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",

View File

@ -19,6 +19,7 @@
"@headlessui/react": "^2.2.1", "@headlessui/react": "^2.2.1",
"@heroicons/react": "^2.2.0", "@heroicons/react": "^2.2.0",
"@hookform/resolvers": "^5.0.1", "@hookform/resolvers": "^5.0.1",
"@next/env": "^15.3.1",
"@payloadcms/db-postgres": "3.31.0", "@payloadcms/db-postgres": "3.31.0",
"@payloadcms/next": "3.31.0", "@payloadcms/next": "3.31.0",
"@payloadcms/payload-cloud": "3.31.0", "@payloadcms/payload-cloud": "3.31.0",

View File

@ -1,8 +1,11 @@
import { admin } from '@/access/admin' import { admin } from '@/access/admin'
import type { CollectionConfig } from 'payload' import type { CollectionConfig } from 'payload'
const expirationInMinutes = parseInt(process.env.PASSWORD_RESET_EXPIRATION_IN_MINUTES || '30') import '../envConfig'
const domain = process.env.DOMAIN_NAME || 'localhost:3000'
const expirationInMinutes = parseInt(process.env.PASSWORD_RESET_EXPIRATION_IN_MINUTES || '30', 10)
const domain = process.env.DOMAIN_NAME || ''
const serverUrl = process.env.SERVER_URL || ''
export const Users: CollectionConfig = { export const Users: CollectionConfig = {
slug: 'users', slug: 'users',
@ -13,31 +16,13 @@ export const Users: CollectionConfig = {
admin: admin admin: admin
}, },
auth: { auth: {
// verify: {
// generateEmailSubject: () => {
// return `Verify Account for ${domain}`
// },
// generateEmailHTML: ({ req, token, user }) => {
// const url = `https://${domain}/verify?token=${token}`
// return `
// <!doctype html>
// <html>
// <body>
// <h1>Verify Account for ${domain}</h1>
// <p>Hey ${user.email}, verify your email by clicking here: ${url}</p>
// <p>If you have not recently been signed up for ${domain} then please ignore this email.</p>
// </body>
// </html>
// `
// },
// },
forgotPassword: { forgotPassword: {
expiration: (60000 * expirationInMinutes),
generateEmailSubject: () => { generateEmailSubject: () => {
console.log({ domain, serverUrl, expirationInMinutes })
return `Reset password request for ${domain}` return `Reset password request for ${domain}`
}, },
generateEmailHTML: (props) => { generateEmailHTML: (props) => {
const resetPasswordURL = `https://${domain}/forgotPassword?token=${props?.token}` const resetPasswordURL = `${serverUrl}/forgotPassword?token=${props?.token}`
return ` return `
<!doctype html> <!doctype html>
@ -58,7 +43,6 @@ export const Users: CollectionConfig = {
}, },
fields: [ fields: [
// Email added by default // Email added by default
// Add more fields as needed
{ {
name: 'role', name: 'role',
type: 'select', type: 'select',

4
src/envConfig.ts Normal file
View File

@ -0,0 +1,4 @@
import { loadEnvConfig } from '@next/env'
const projectDir = process.cwd()
loadEnvConfig(projectDir)

View File

@ -19,6 +19,8 @@ import { Pages } from './collections/Pages/Pages'
import HoldRequests from './collections/Checkouts/HoldRequests' import HoldRequests from './collections/Checkouts/HoldRequests'
import Checkouts from './collections/Checkouts/Checkouts' import Checkouts from './collections/Checkouts/Checkouts'
import './envConfig.ts'
const filename = fileURLToPath(import.meta.url) const filename = fileURLToPath(import.meta.url)
const dirname = path.dirname(filename) const dirname = path.dirname(filename)
@ -30,8 +32,8 @@ export default buildConfig({
}, },
dateFormat: 'MM/dd/yyyy', dateFormat: 'MM/dd/yyyy',
}, },
//cors: [process.env.DOMAIN_NAME || ''], cors: [process.env.SERVER_URL || ''],
//csrf: [process.env.DOMAIN_NAME || ''], csrf: [process.env.SERVER_URL || ''],
upload: { upload: {
limits: { limits: {
fileSize: 5000000, // in bytes fileSize: 5000000, // in bytes

View File

@ -17,19 +17,16 @@ export const resetPassword = async (props: Props): Promise<boolean> => {
const payload = await getPayload({ config: payloadConfig }) const payload = await getPayload({ config: payloadConfig })
try { try {
const result = await payload.resetPassword({ await payload.resetPassword({
collection: 'users', collection: 'users',
overrideAccess: false, overrideAccess: true,
data: { data: {
password: password, password: password,
token: token, token: token,
} }
}) })
console.log('result')
console.log(result)
return true return true
} catch (err) { } catch (err) {
console.log(err)
return false return false
} }
} }