axios 인터셉터(TypeScript)를 사용하여 인증 로그인 시스템을 생성하는 방법 1부
12391 단어 javascripttypescriptbeginnersreact
이 기사에서는 axios 인터셉터를 사용하는 인증 시스템의 작은 프로세스를 공유하고 있습니다. 아래 개념은 이메일 또는 비밀번호를 제출할 때 해당 사용자가 서버에 존재하는지 확인하고 사용자가 인증되면 사용자가 다른 페이지로 이동할 수 있다는 것입니다.
인터셉터에 대한 추가 정보를 확인할 수 있습니다here.
SignIn 구성 요소 내에서 단순히 게시 요청을 수행할 수 있지만 언젠가는 axios가 더 이상 존재하지 않고 한 곳에서 사용한 것을 변경할 수 있지만 그 뒤에 있는 논리가 아닌 경우 인터셉터가 방법입니다. 가다. 또한 이것은 최근 [MVP] - 최소 실행 가능 제품 - LINK 이라는 개념으로, 여전히 그것에 대해 알아보려고 노력하고 있지만 알아두면 좋습니다.
그건 그렇고, 기사는 그것이 어떻게 작동하는지에 대한 아이디어를 제공하고 있습니다. 물론 당신은 당신 자신의 비트와 조각, API 등을 추가해야 할 것입니다...
그러니 한 걸음 뒤로 물러나 봅시다.
아래에서 공유하는 내용은 다음과 같습니다.
서버로 설정
REACT_APP_API_URL
아래에는 .env 파일 또는 .env.local에 저장된 자체 API가 있을 수 있습니다.interface ConfigType {
ApiUrl: string
}
const config: ConfigType = {
ApiUrl: process.env.REACT_APP_API_URL || '',
}
export default config
여기에 우리의
http-client file.
import axios from 'axios'
import config from './config'
import setupInterceptorsTo from './http-client-interceptor'
const instance = axios.create({
baseURL: config.ApiUrl,
headers: {
'Content-type': 'application/json',
},
})
export default setupInterceptorsTo(instance)
서비스 레이어 생성
아래에는 항상 다른 유형의 오류가 있기 때문에 오류 메시지를 처리할 인터셉터가 있습니다.
import { AxiosError, AxiosInstance, AxiosRequestConfig } from 'axios'
import { toast } from 'react-toastify'
import { isObject, isEmpty } from 'lodash'
const API_DEFAULT_MESSAGE_REQUEST = 'The request is invalid'
function handleError(serverError: any) {
if (isObject(serverError)) {
Object.entries(serverError).forEach(([, value]) => {
const errorMessage = isEmpty(value) ? API_DEFAULT_MESSAGE_REQUEST : value
toast.error(`${errorMessage}`)
})
}
}
const onRequest = (config: AxiosRequestConfig): AxiosRequestConfig => {
return config
}
const onResponseError = (error: AxiosError): Promise<AxiosError> => {
handleError(error?.response?.data)
return Promise.reject(error)
}
export default function setupInterceptorsTo(axiosInstance: AxiosInstance): AxiosInstance {
axiosInstance.interceptors.request.use(onRequest, undefined)
axiosInstance.interceptors.response.use(undefined, onResponseError)
return axiosInstance
}
여기서 우리는 실제로 서버에 요청을 보냅니다. 이 경우 게시 요청입니다.
import { BehaviorSubject } from 'rxjs'
import { isNull } from 'lodash'
import httpClient from '../../shared/http-client'
interface LoginRequestModel {
email: string
password: string
}
const currentUserSubject = isNull(localStorage.getItem('current_user'))
? new BehaviorSubject(null)
: new BehaviorSubject(JSON.parse(localStorage.getItem('current_user')!))
export const currentUserValue = currentUserSubject.value
export async function login(requestData: LoginRequestModel): Promise<string> {
const response = await httpClient.post('/auth/login', requestData)
const { access_token: accesstoken } = response.data
return accesstoken
}
마지막으로 SignIn 구성 요소에서 로그인 기능을 호출할 수 있으며 비동기 방식으로 사용하기만 하면 됩니다. where
await login(data)
. 위의 기능에 대한 스키마가 있고 우리를 위해 모든 작업을 수행하므로 그것이 얻는 유일한 입력입니다.
Reference
이 문제에 관하여(axios 인터셉터(TypeScript)를 사용하여 인증 로그인 시스템을 생성하는 방법 1부), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/vikirobles/how-to-create-an-auth-login-system-with-axios-interceptors-typescript-2k11텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)