acessToken
이 나오게 됩니다. 이 acessToken
는 24시간 유효합니다.acessToken
은 나옵니다)acessToken
을 로컬스토로지에 저장을 해놓았다가, 로컬스토로지에 저장된 이 acessToken
를 인증 확인하는 용도로 다시 서버에 요청할 수 있습니다.로컬스토로지에 임의로 currentUser
값을 설정해줍니다. 로컬스토로지에의 정보는 json정보(문자데이터)이기 때문에 자바스크립트에서 사용하기 위해서 JSON.pars
를 해줘야합니다.
guards.js
import router from './index.js'
router.beforeEach((to) => {
console.log(to.meta.auth)
console.log(JSON.parse(localStorage.getItem('currentUser')))
return true
})
이렇게 받아온 정보의 name이 있으면 유효한 사용자라는 것을 알 수 있습니다.
guards.js
to.meta.auth
를 이용해 로그인 검증 로직을 짤 수 있습니다.to.meta.auth
가 true인지를 먼저 체크한 후 localStorage의 currentUser에 name 이 있는지를 확인하는 로직입니다.to.meta.auth
설정이 된 페이지에 접근이 가능합니다. 그렇지 않은 경우 메인페이지로 이동하게 됩니다.import router from './index.js'
router.beforeEach((to) => {
if(to.meta.auth) { //true인 경우
//currentUser에 name이 있으면 로그인 한 사람입니다,
//{}의 경우 null을 대비합니다.(json.parse떄문에 '{}'로합니다.)
const {name} = JSON.parse(localStorage.getItem('currentUser') || '{}')
if(name) {
// name이 있으면 통과~!
return true
} else {
//name이 없으면 메인페이지로 가라
//(login페이지로 보내야하는데 없으니 메인페이지 보통은 '/login'으로 보냅니다.)
return '/'
}
}
return true
})
guards.js
import router from './index.js'
async function me(accessToken) {
const { data: user } = await axios({
url: 'https://asia-northeast3-heropy-api.cloudfunctions.net/api/auth/login',
method: 'POST',
headers: {
//default infos...
Authorization: 'Bearer ' + accessToken
}
})
return !!user.email
}
router.beforeEach((to) => {
if(to.meta.auth) {
const accessToken = JSON.parse(localStorage.getItem('accessToken') || '')
return me(accessToken)
? true
: '/login'
}
return true
})
$fetch
const API_ENDPOINT = 'https://asia-northeast3-heropy-api.cloudfunctions.net/api'
const headers = {
"content-type": "application/json",
"apikey": "FcKdtJs202204",
"username": "<YOUR_NAME>"
}
export default {
install: app => {
app.config.globalProperties.$fetch = async(url, opts) => {
const mergeHeader = {
...headers,
...opts.headers
}
const {data} = await axios(API_ENDPOINT + url, {
...opts,
headers: mergeHeader
})
return data
}
}
}
async logOut() {
try {
const res = await this.$fetch(`${_URL}/logout`, {
method: 'POST',
headers: {
Authorization: `Bearer ${this.token}`
}
})
console.log(res)
this.user = {}
} catch(error) {
console.log(error.response.data)
}
}
회원가입의 경우 날것의 사용자가 들어오기 때문에 요청데이터 예시에서 볼 수 있듯이 accesToken과 같은 정보는 필요하지 않습니다
사용자정보 업데이트
async updateUser() {
const token = this.token || sessionStorage.getItem('accessToken')
try {
this.user = await this.$fetch(`${_URL}/user`, {
method : 'PUT',
headers: {
Authorization: `Bearer ${token}`
},
data: {
oldPassword: this.oldPassword,
newPassword: this.newPassword,
displayName: this.displayName,
profileImgBase64: this.profileImgBase64
}
})
console.log(this.user)
} catch(error) {
console.log(error.response.data)
}
}
프로필사진수정
selectFile(event) {
const {files} = event.target
for(const file of files) {
const reader = new FileReader()
reader.readAsDataURL(file)
reader.onload = e => {
this.profileImgBase64 = e.target.result
console.log(e.target.result)
}
}
}
msaterKey: true
를 넣어줘야합니다.isSoldOut:true
webpack의 경우
- static 폴더 내에
_redirects
파일 생성
vite의 경우- publice 폴더 내에
_redirects
파일 생성
_redirects
/* .index.html 200
루트 경로에 vercel.json
파일 생성
{
"rewrites":[{ "source":"/:path*" , "destination": "/index.html" }]
}