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
+30 -43

No files matched your search

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