use cookie to send refreshToken
This commit is contained in:
parent
f7d80956da
commit
3a3f427daa
@ -5,17 +5,16 @@ import {
|
|||||||
RegisterInputDto,
|
RegisterInputDto,
|
||||||
ForgetPasswordInputDto,
|
ForgetPasswordInputDto,
|
||||||
DeleteUser,
|
DeleteUser,
|
||||||
Token,
|
AccessToken,
|
||||||
TokenRefreshPayload,
|
|
||||||
User,
|
User,
|
||||||
} from './user.interface'
|
} from './user.interface'
|
||||||
|
|
||||||
export async function register(data: RegisterInputDto) {
|
export async function register(data: RegisterInputDto) {
|
||||||
return axios.post<Token>('/api/users', data)
|
return axios.post<AccessToken>('/api/users', data)
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function login(data: LoginInputDto) {
|
export async function login(data: LoginInputDto) {
|
||||||
return axios.post<Token>('/api/users/token', data)
|
return axios.post<AccessToken>('/api/users/token', data)
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function logout() {
|
export async function logout() {
|
||||||
@ -23,17 +22,17 @@ export async function logout() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function forgetPassword(data: ForgetPasswordInputDto) {
|
export async function forgetPassword(data: ForgetPasswordInputDto) {
|
||||||
return axios.patch<Token>('/api/users/password', data)
|
return axios.patch<AccessToken>('/api/users/password', data)
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function deleteUser(data: DeleteUser) {
|
export async function deleteUser(data: DeleteUser) {
|
||||||
return axios.delete('/api/users/me', { data })
|
return axios.delete('/api/users/me', { data })
|
||||||
}
|
}
|
||||||
|
|
||||||
let refreshing: Promise<AxiosResponse<Token>> | null
|
let refreshing: Promise<AxiosResponse<AccessToken>> | null
|
||||||
export async function refreshToken(data: TokenRefreshPayload) {
|
export async function refreshToken() {
|
||||||
if (!refreshing) {
|
if (!refreshing) {
|
||||||
refreshing = axios.put<Token>('/api/users/me/token', data).finally(() => {
|
refreshing = axios.put<AccessToken>('/api/users/me/token').finally(() => {
|
||||||
refreshing = null
|
refreshing = null
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -23,14 +23,7 @@ export interface DeleteUser extends EmailVerifyDto {
|
|||||||
password: string
|
password: string
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface Token {
|
export type AccessToken = string
|
||||||
accessToken: string
|
|
||||||
refreshToken: string
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface TokenRefreshPayload {
|
|
||||||
refreshToken: string
|
|
||||||
}
|
|
||||||
|
|
||||||
/** 用户 */
|
/** 用户 */
|
||||||
export interface User {
|
export interface User {
|
||||||
|
@ -38,7 +38,6 @@ export function DeleteUser() {
|
|||||||
onSubmit: async (values) => {
|
onSubmit: async (values) => {
|
||||||
await api.user.deleteUser(values)
|
await api.user.deleteUser(values)
|
||||||
localStorage.removeItem('accessToken')
|
localStorage.removeItem('accessToken')
|
||||||
localStorage.removeItem('refreshToken')
|
|
||||||
toast.success('用户删除成功')
|
toast.success('用户删除成功')
|
||||||
router.push('/login')
|
router.push('/login')
|
||||||
},
|
},
|
||||||
|
@ -34,8 +34,7 @@ export default function ForgetPassword() {
|
|||||||
}),
|
}),
|
||||||
onSubmit: async (values) => {
|
onSubmit: async (values) => {
|
||||||
const res = await api.user.forgetPassword(values)
|
const res = await api.user.forgetPassword(values)
|
||||||
localStorage.setItem('accessToken', res.data.accessToken)
|
localStorage.setItem('accessToken', res.data)
|
||||||
localStorage.setItem('refreshToken', res.data.refreshToken)
|
|
||||||
toast.success('密码重置成功!', {
|
toast.success('密码重置成功!', {
|
||||||
onClose: () => router.push('/login'),
|
onClose: () => router.push('/login'),
|
||||||
})
|
})
|
||||||
|
@ -30,7 +30,6 @@ export default function Home() {
|
|||||||
async function logout() {
|
async function logout() {
|
||||||
await api.user.logout()
|
await api.user.logout()
|
||||||
localStorage.removeItem('accessToken')
|
localStorage.removeItem('accessToken')
|
||||||
localStorage.removeItem('refreshToken')
|
|
||||||
router.push('/login')
|
router.push('/login')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -26,8 +26,7 @@ export default function Login() {
|
|||||||
}),
|
}),
|
||||||
onSubmit: async (values) => {
|
onSubmit: async (values) => {
|
||||||
const res = await api.user.login(values)
|
const res = await api.user.login(values)
|
||||||
localStorage.setItem('accessToken', res.data.accessToken)
|
localStorage.setItem('accessToken', res.data)
|
||||||
localStorage.setItem('refreshToken', res.data.refreshToken)
|
|
||||||
router.push('/')
|
router.push('/')
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
@ -32,8 +32,7 @@ export default function Register() {
|
|||||||
}),
|
}),
|
||||||
onSubmit: async (values) => {
|
onSubmit: async (values) => {
|
||||||
const res = await api.user.register(values)
|
const res = await api.user.register(values)
|
||||||
localStorage.setItem('accessToken', res.data.accessToken)
|
localStorage.setItem('accessToken', res.data)
|
||||||
localStorage.setItem('refreshToken', res.data.refreshToken)
|
|
||||||
router.push('/')
|
router.push('/')
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
@ -38,14 +38,11 @@ axios.interceptors.response.use(
|
|||||||
}
|
}
|
||||||
switch (error.response?.status) {
|
switch (error.response?.status) {
|
||||||
case status.UNAUTHORIZED: {
|
case status.UNAUTHORIZED: {
|
||||||
const refreshToken = localStorage.getItem('refreshToken')
|
if (error.config?.url === '/api/users/token') {
|
||||||
if (!refreshToken) {
|
throw throwError(error)
|
||||||
Router.push('/login')
|
|
||||||
return Promise.reject(error)
|
|
||||||
}
|
}
|
||||||
const res = await api.user.refreshToken({ refreshToken })
|
const res = await api.user.refreshToken()
|
||||||
localStorage.setItem('accessToken', res.data.accessToken)
|
localStorage.setItem('accessToken', res.data)
|
||||||
localStorage.setItem('refreshToken', res.data.refreshToken)
|
|
||||||
return error.config && axios.request(error.config)
|
return error.config && axios.request(error.config)
|
||||||
}
|
}
|
||||||
default: {
|
default: {
|
||||||
|
Loading…
Reference in New Issue
Block a user