ATC_SIMPLE/BACKEND/app/controllers/auth_controller.ts

96 lines
2.8 KiB
TypeScript

import axios from 'axios'
import type { HttpContext } from '@adonisjs/core/http'
import User from '../models/user.js'
export default class AuthController {
// Đăng ký
async register({ request, response }: HttpContext) {
try {
const data = request.only(['email', 'password', 'user_name', 'first_name', 'last_name'])
const user = await User.query().where('user_name', data.user_name).first()
if (user) {
return response.status(401).json({ status: false, message: 'Username is exist' })
}
const newUser = await User.create(data)
return response.json({ status: true, message: 'User created', user: newUser })
} catch (error) {
return response.status(401).json({ error, status: false, message: 'Invalid credentials' })
}
}
// Đăng nhập
async login({ request, auth, response }: HttpContext) {
const { user_name: userName, password } = request.only([
'user_name',
'password',
'first_name',
'last_name',
])
const user = await User.query().where('user_name', userName).first()
if (!user) {
const remoteUrl = process.env.ERP_URL_AUTH || 'https://stage.nswteam.net'
const remoteResp = await axios.post(remoteUrl + '/api/login', {
userEmail: userName,
password: password,
})
if (!remoteResp?.data || !remoteResp.data.success) {
return response.badRequest({
status: false,
message: 'Login ERP Fail, Email or password is incorrect',
error: 'EMAIL_OR_PASSWORD_INCORRECT',
})
}
const remoteUser = remoteResp.data.data
const newUser = await User.create({
email: remoteUser.userEmail,
userName: userName,
password: password,
firstName: remoteUser?.firstName || null,
lastName: remoteUser?.lastName || null,
})
return response.json({
message: 'Login successful',
user: {
id: newUser.id,
email: newUser.email,
userName: newUser.userName,
firstName: newUser.firstName,
lastName: newUser.lastName,
},
})
}
try {
// So sánh password
if (user.password !== password) {
return response.status(401).json({ message: 'Invalid username or password' })
}
return response.json({
message: 'Login successful',
user: {
id: user.id,
email: user.email,
userName: user.userName,
firstName: user.firstName,
lastName: user.lastName,
},
})
} catch {
return response.status(401).json({ message: 'Invalid credentials' })
}
}
// Đăng xuất
async logout({ auth, response }: HttpContext) {
return response.json({ message: 'Logged out successfully' })
}
}