39 lines
1.2 KiB
JavaScript
39 lines
1.2 KiB
JavaScript
|
|
import Redis from 'ioredis';
|
||
|
|
import bcrypt from 'bcrypt';
|
||
|
|
import { sendError } from '../utils/response.js';
|
||
|
|
import { GeneralService } from '../share/generalservice.js';
|
||
|
|
|
||
|
|
export class ResetPasswordService {
|
||
|
|
constructor() {
|
||
|
|
this.redis = new Redis();
|
||
|
|
this.generalService = new GeneralService();
|
||
|
|
}
|
||
|
|
|
||
|
|
async resetPassword(email, token, newPassword) {
|
||
|
|
let database = '';
|
||
|
|
|
||
|
|
const storedToken = await this.redis.get(`reset:${email}`);
|
||
|
|
if (!storedToken || storedToken !== token) {
|
||
|
|
throw sendError('Token ไม่ถูกต้องหรือหมดอายุ', 'Invalid or expired token');
|
||
|
|
}
|
||
|
|
|
||
|
|
await this.redis.del(`reset:${email}`);
|
||
|
|
|
||
|
|
// อัปเดตรหัสผ่านในฐานข้อมูลจริง
|
||
|
|
const hashedPwd = await bcrypt.hash(newPassword, 10);
|
||
|
|
let sql = `
|
||
|
|
UPDATE usrmst SET usrpwd = $1 WHERE usrnam = $2
|
||
|
|
`
|
||
|
|
let param = [hashedPwd, email];
|
||
|
|
await this.generalService.executeQueryParam(database, sql, param);
|
||
|
|
|
||
|
|
this.generalService.devhint(1, 'resetpasswordservice.js', `Password reset successful (${email})`);
|
||
|
|
|
||
|
|
return {
|
||
|
|
code: '200',
|
||
|
|
message: 'successful',
|
||
|
|
message_th: 'รีเซ็ตรหัสผ่านสำเร็จ'
|
||
|
|
};
|
||
|
|
}
|
||
|
|
}
|