@@ -32,13 +118,29 @@ const clearError = () => {
Linux Odyssey
diff --git a/app/src/utils/auth.js b/app/src/utils/auth.js
index 3c0eda2..749f368 100644
--- a/app/src/utils/auth.js
+++ b/app/src/utils/auth.js
@@ -40,6 +40,24 @@ export const login = async (username, password) => {
}
}
+export const register = async (username, email, password) => {
+ try {
+ const res = await api.post('/auth/register', {
+ username,
+ password,
+ email,
+ })
+ const { token } = res.data
+ myToken.value = token
+ return true
+ } catch (err) {
+ if (err.response?.status === 409) {
+ return false
+ }
+ throw err
+ }
+}
+
export const logout = () => {
myToken.value = null
}
diff --git a/server/src/api/controllers/authController.js b/server/src/api/controllers/authController.js
index 62802d0..b8c702d 100644
--- a/server/src/api/controllers/authController.js
+++ b/server/src/api/controllers/authController.js
@@ -17,32 +17,40 @@ export async function issueToken(req, res) {
}
export async function checkUsername(req, res) {
- const { username } = req.query
- if (isValidEmail(username)) {
- if (await User.exists({ email: username })) {
+ const { username, email } = req.query
+ const cred = username || email
+ if (!cred) {
+ res.status(400).json({
+ message: 'username or email is required',
+ })
+ return
+ }
+
+ if (isValidEmail(cred)) {
+ if (await User.exists({ email: cred })) {
res.status(409).json({
type: 'email',
- message: `"${username}" already exists`,
+ message: `"${cred}" already exists`,
})
return
}
res.status(200).json({
type: 'email',
- message: `"${username}" is available`,
+ message: `"${cred}" is available`,
})
return
}
- if (isValidUsername(username)) {
- if (await User.exists({ username })) {
+ if (isValidUsername(cred)) {
+ if (await User.exists({ username: cred })) {
res.status(409).json({
type: 'username',
- message: `"${username}" already exists`,
+ message: `"${cred}" already exists`,
})
return
}
res.status(200).json({
type: 'username',
- message: `"${username}" is available`,
+ message: `"${cred}" is available`,
})
return
}
@@ -63,15 +71,23 @@ export async function register(req, res, next) {
res.status(409).json({
message: 'username or email already exists',
})
+ console.log(await User.find({ $or: [{ username }, { email }] }))
return
}
const user = new User({
username,
email,
})
- user.hashedPassword = await hashPassword(password)
- await user.save()
- req.user = user
- res.status(201)
- next()
+ try {
+ user.hashedPassword = await hashPassword(password)
+ await user.save()
+ req.user = user
+ res.status(201)
+ next()
+ } catch (err) {
+ console.error(err)
+ res.status(500).json({
+ message: 'error registering user',
+ })
+ }
}