fix: login with token returns new token
This commit is contained in:
1
client/package-lock.json
generated
1
client/package-lock.json
generated
@@ -5,6 +5,7 @@
|
|||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
|
"name": "client",
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|||||||
@@ -19,9 +19,14 @@ export function AuthProvider({children}) {
|
|||||||
new Promise((resolve, reject) => {
|
new Promise((resolve, reject) => {
|
||||||
axios
|
axios
|
||||||
.post('/auth/register', formData)
|
.post('/auth/register', formData)
|
||||||
.then(({data: {data, token}}) => {
|
.then(({
|
||||||
setAccount(data)
|
data: {
|
||||||
setToken(token)
|
data: accountData,
|
||||||
|
token: accessToken,
|
||||||
|
},
|
||||||
|
}) => {
|
||||||
|
setAccount(accountData)
|
||||||
|
setToken(accessToken)
|
||||||
setIsLoggedIn(true)
|
setIsLoggedIn(true)
|
||||||
resolve(true)
|
resolve(true)
|
||||||
})
|
})
|
||||||
@@ -35,9 +40,14 @@ export function AuthProvider({children}) {
|
|||||||
new Promise((resolve, reject) => {
|
new Promise((resolve, reject) => {
|
||||||
axios
|
axios
|
||||||
.post('/auth/login', formData)
|
.post('/auth/login', formData)
|
||||||
.then(({data: {data, token}}) => {
|
.then(({
|
||||||
setAccount(data)
|
data: {
|
||||||
setToken(token)
|
data: accountData,
|
||||||
|
token: accessToken,
|
||||||
|
},
|
||||||
|
}) => {
|
||||||
|
setAccount(accountData)
|
||||||
|
setToken(accessToken)
|
||||||
setIsLoggedIn(true)
|
setIsLoggedIn(true)
|
||||||
resolve(true)
|
resolve(true)
|
||||||
})
|
})
|
||||||
@@ -53,12 +63,21 @@ export function AuthProvider({children}) {
|
|||||||
setToken(null)
|
setToken(null)
|
||||||
}
|
}
|
||||||
|
|
||||||
const getAccount = async () => {
|
const loginWithToken = async () => {
|
||||||
try {
|
try {
|
||||||
const headers = {headers: {authorization: `Bearer ${token}`}}
|
const {
|
||||||
const response = await axios.get('/auth/account', headers)
|
data: {
|
||||||
|
data: accountData,
|
||||||
|
token: accessToken,
|
||||||
|
},
|
||||||
|
} = await axios.get('/auth/login', {
|
||||||
|
headers: {
|
||||||
|
authorization: `Bearer ${token}`,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
setAccount(response.data.data)
|
setAccount(accountData)
|
||||||
|
setToken(accessToken)
|
||||||
setIsLoggedIn(true)
|
setIsLoggedIn(true)
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(error)
|
console.error(error)
|
||||||
@@ -80,7 +99,7 @@ export function AuthProvider({children}) {
|
|||||||
// This "if" statement is "true" only when refreshed, or re-opened the browser,
|
// This "if" statement is "true" only when refreshed, or re-opened the browser,
|
||||||
// if true, it will then ask the backend for the account information (and will get them if the token hasn't expired)
|
// if true, it will then ask the backend for the account information (and will get them if the token hasn't expired)
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!isLoggedIn && !account && token) getAccount()
|
if (!isLoggedIn && !account && token) loginWithToken()
|
||||||
}, [isLoggedIn, account, token]) // eslint-disable-line react-hooks/exhaustive-deps
|
}, [isLoggedIn, account, token]) // eslint-disable-line react-hooks/exhaustive-deps
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -1,20 +0,0 @@
|
|||||||
const Account = require('../../models/Account')
|
|
||||||
|
|
||||||
async function getAccount(request, response, next) {
|
|
||||||
try {
|
|
||||||
const {uid} = request.auth
|
|
||||||
|
|
||||||
// Get account from DB, existance not verified because we are already authorized at this point
|
|
||||||
const foundAccount = await Account.findOne({_id: uid}).select('-password')
|
|
||||||
|
|
||||||
response.status(200).json({
|
|
||||||
message: 'Account fetched',
|
|
||||||
data: foundAccount,
|
|
||||||
})
|
|
||||||
} catch (error) {
|
|
||||||
console.error(error)
|
|
||||||
response.status(500).send()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = getAccount
|
|
||||||
25
server/controllers/auth/login-with-token.js
Normal file
25
server/controllers/auth/login-with-token.js
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
const Account = require('../../models/Account')
|
||||||
|
const { signToken } = require('../../middlewares/jsonwebtoken')
|
||||||
|
|
||||||
|
async function loginWithToken(request, response, next) {
|
||||||
|
try {
|
||||||
|
const { uid } = request.auth
|
||||||
|
|
||||||
|
// Get account from DB, existance not verified because we are already authorized at this point
|
||||||
|
const foundAccount = await Account.findOne({ _id: uid }).select('-password')
|
||||||
|
|
||||||
|
// Generate access token
|
||||||
|
const token = signToken({ uid: foundAccount._id, role: foundAccount.role })
|
||||||
|
|
||||||
|
response.status(200).json({
|
||||||
|
message: 'Account fetched',
|
||||||
|
data: foundAccount,
|
||||||
|
token,
|
||||||
|
})
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error)
|
||||||
|
response.status(500).send()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = loginWithToken
|
||||||
1
server/package-lock.json
generated
1
server/package-lock.json
generated
@@ -5,6 +5,7 @@
|
|||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
|
"name": "server",
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ const express = require('express')
|
|||||||
const { authorizeBearerToken } = require('../middlewares/jsonwebtoken')
|
const { authorizeBearerToken } = require('../middlewares/jsonwebtoken')
|
||||||
const register = require('../controllers/auth/register')
|
const register = require('../controllers/auth/register')
|
||||||
const login = require('../controllers/auth/login')
|
const login = require('../controllers/auth/login')
|
||||||
const getAccount = require('../controllers/auth/get-account')
|
const loginWithToken = require('../controllers/auth/login-with-token')
|
||||||
|
|
||||||
// initialize router
|
// initialize router
|
||||||
const router = express.Router()
|
const router = express.Router()
|
||||||
@@ -14,6 +14,6 @@ router.post('/register', [], register)
|
|||||||
router.post('/login', [], login)
|
router.post('/login', [], login)
|
||||||
|
|
||||||
// GET at path: http://localhost:8080/auth/account
|
// GET at path: http://localhost:8080/auth/account
|
||||||
router.get('/account', [authorizeBearerToken], getAccount)
|
router.get('/login', [authorizeBearerToken], loginWithToken)
|
||||||
|
|
||||||
module.exports = router
|
module.exports = router
|
||||||
|
|||||||
Reference in New Issue
Block a user