feat: add register, checkUsername, update swagger

This commit is contained in:
wancat committed 2023-09-12 23:01:49 +08:00
1 parent 04a0b21cf6
commit b55b7aa1ec
6 files changed
+118 -23

No files matched your search

@@ -0,0 +1,51 @@
import User from '../../models/user.js'
import { genJWT, hashPassword } from '../../utils/auth.js'
export async function issueToken(req, res) {
const { user } = req
const token = await genJWT({
_id: user.id,
username: user.username,
email: user.email,
})
res.json({ token })
}
export async function checkUsername(req, res) {
const { username } = req.query
const exists = await User.exists({ username })
if (exists) {
res.status(409).json({
message: `"${username}" already exists`,
})
} else {
res.status(200).json({
message: `"${username}" is available`,
})
}
}
export async function register(req, res, next) {
const { username, password, email } = req.body
if (!(username && password && email)) {
res.status(400).json({
message: 'username, password, and email are required',
})
return
}
if (await User.exists({ $or: [{ username }, { email }] })) {
res.status(409).json({
message: 'username or email already exists',
})
return
}
const user = new User({
username,
email,
})
user.hashedPassword = await hashPassword(password)
await user.save()
req.user = user
res.status(201)
next()
}
+10 -12
View File
@@ -1,24 +1,22 @@
import { Router } from 'express'
import passport from 'passport'
import { genJWT } from '../../utils/auth.js'
import {
issueToken,
register,
checkUsername,
} from '../controllers/authController.js'
const router = Router()
async function issueToken(req, res) {
const { user } = req
const token = await genJWT({
_id: user.id,
username: user.username,
email: user.email,
})
res.json({ token })
}
router.post(
'/login/password',
'/login',
passport.authenticate('local', { session: false }),
issueToken
)
router.post('/register', register, issueToken)
router.get('/check', checkUsername)
export default router
+1 -1
View File
@@ -11,7 +11,7 @@ router.get('/', (req, res) => {
res.send('Hello API!')
})
router.use(authRouter)
router.use('/auth', authRouter)
router.use('/quests', quests)
router.use(
'/sessions',