fix: update client to authenticate by session

This commit is contained in:
wancat committed 2023-09-18 22:51:20 +08:00
1 parent 59ced31094
commit 45231dda11
2 files changed
+28 -41

No files matched your search

+2 -2
View File
@@ -4,8 +4,8 @@ import { logout } from '../utils/auth'
const router = useRouter()
const handleLogout = () => {
logout()
const handleLogout = async () => {
await logout()
router.push({ name: 'auth' })
}
</script>
+26 -39
View File
@@ -5,6 +5,7 @@ import { io } from 'socket.io-client'
import { program } from 'commander'
let api = null
const COOKIE_NAME = 'connect.sid'
function get(key, defaultValue) {
const value = process.env[key]
@@ -48,7 +49,7 @@ async function lastSession() {
console.log(
'No session found. Please use --create to create a new session.'
)
exit(1)
return null
}
const session = sessions[sessions.length - 1]
console.log(
@@ -57,14 +58,14 @@ async function lastSession() {
return session
}
async function connect(sessionId, token) {
async function connect(sessionId, cookie) {
console.log(`Session ID: ${sessionId}`)
console.log('Use Ctrl + D to exit.')
if (!sessionId) exit()
const socket = io(program.opts().host, {
auth: {
token,
extraHeaders: {
Cookie: cookie,
},
query: {
session_id: sessionId,
@@ -76,7 +77,7 @@ async function connect(sessionId, token) {
})
socket.on('connect_error', (err) => {
console.error(err.message)
console.error(err)
exit(1)
})
@@ -111,21 +112,18 @@ async function connect(sessionId, token) {
async function login() {
try {
const res = await api.post('/login/password', {
const res = await api.post('/auth/login', {
username: program.opts().user,
password: program.opts().password,
})
const { token } = res.data
if (!token) {
console.error(res.data)
exit(1)
}
console.log('Login success.')
return token
return res.headers['set-cookie'].find((cookie) =>
cookie.startsWith(COOKIE_NAME)
)
} catch (err) {
console.log('Login failed.')
console.error(err.message)
exit(1)
return null
return exit(1)
}
}
@@ -135,31 +133,31 @@ async function main() {
headers: {
'Content-Type': 'application/json',
},
withCredentials: true,
})
console.log(program.opts().session)
// main()
const token = await login()
api.defaults.headers.common.Authorization = `Bearer ${token}`
try {
const cookie = await login()
api.defaults.headers.Cookie = cookie
const sessionId =
program.opts().session ||
(program.opts().create ? (await createSession())._id : null) ||
(await lastSession())._id
(program.opts().create && (await createSession())?._id) ||
(await lastSession())?._id ||
(await createSession())?._id
await connect(sessionId, token)
await connect(sessionId, cookie)
} catch (err) {
console.error(err.message)
exit(1)
}
}
program
.option('-s, --session <string>', 'Session ID')
.option('-c, --create', 'Create a new session')
.option('-d, --debug', 'Debug mode')
.option('-u, --user <string>', 'Username', get('USERNAME', 'testUser'))
.option(
'-p, --password <string>',
'Password',
get('PASSWORD', 'testPassword')
)
.option('-u, --user <string>', 'Username', get('USERNAME', 'alex'))
.option('-p, --password <string>', 'Password', get('PASSWORD', '123456'))
.option(
'-h, --host <string>',
'Server host',
@@ -167,15 +165,4 @@ program
)
.action(main)
program
.command('list')
.description('List all sessions')
.action(async () => {
const sessions = await getSessionList()
sessions.forEach(({ _id, quest, createdAt }) => {
console.log(`${_id} ${quest} ${createdAt}`)
})
exit()
})
program.parse()