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