카카오톡 로그인 메서드 구현
<img :src="require('@/assets/image/kakao.png')" @click="kakaoLogin" />
kakaoLogin() {
const redirect_uri = 'http://localhost:8182/kakaojoin';
const clientId = '자신의 키';
const Auth_url = `https://kauth.kakao.com/oauth/authorize?response_type=code&client_id=${clientId}&redirect_uri=${redirect_uri}`;
window.location.href = Auth_url;
}
created 함수 적용
카카오디벨로퍼스에 미리 정해 놓은 클라이언트 측 redirect_uri 페이지를 component로 작성한다.
그 뒤 해당 페이지가 로딩되자마자 인자로 받았던 인가코드를 빼내어 카카오톡에게 토큰값을 요청한다.
created() {
this.code = this.$route.query.code;
console.log(this.code)
this.getToken();
},
토큰 값 요청 메서드
백단에서 카카오 엑세스 토큰을 요청해야 하므로 axios로
또한 해당 아이디가 이미 서버 측 DB에 있는지 확인해야 한다.
있다면 아래의 회원가입 페이지를 스킵하고 아니라면 회원가입을 진행시켜준다.
getToken() {
const self = this;
self.$axios.get('http://localhost:8181/kakaologin/' + self.code)
.then((res) => {
console.log(res)
self.form.email = res.data.email;
self.form.pwd = res.data.id;
self.form.nickname = res.data.nickname;
self.form.kakaotoken = res.data.accessToken;
self.$axios.get('http://localhost:8181/members/getKakaomember/' + self.form.email)
.then(function (res) {
if (res.status == 200) {
console.log(res.data.flag)
if (res.data.flag == false) {
console.log(res.data.flag)
alert('회원가입을하세요')
} else {
self.klogin()
}
}
});
});
},
회원가입 폼 작성
원하는 회원가입 폼 코드를 작성하여 회원가입을 진행 시켜준다.
나 같은 경우에는 접은 글처럼 templete을 작성해 주었다.
더보기
<template>
<div class="form" :class="activeForm">
<br/>
<div>
</div>
<div class="form-header">
<img :src="require('@/assets/image/KakaoTalk_logo.png')" style="width: 25%; "/>
</div>
<div class="form-elements">
<div class="form-element" style="display: flex;">
<input v-model="form.email" type="text" style="flex: 1; margin-right: 5px;"
required disabled />
</div>
<div class="form-element">
<input type="text" @input="autoHyphen($event.target)" maxlength="13" v-model="phone" placeholder="phone number">
</div>
<div class="form-element">
<input type="text" v-model="form.nickname" required disabled />
</div>
<div style="margin-top : 10px;">
<label class="input-file-wrapper">
<div class="upload-button-text" style="text-align: left; color : grey;">{{ uploadButtonText }}</div>
<input type="file" id="img-input-file" class="form-element" style="display :none;" @change="handleFileUpload" />
</label>
</div>
<div class="form-element">
<button id="submit-btn" @click="onSubmit()">카카오톡으로 회원가입 하기</button>
</div>
</div>
<div class="button-wrapper">
<router-link to="/" class="custom-link">돌아가기</router-link>
</div>
</div>
</template>
회원가입 메서드 작성
카카오톡으로 회원가입 하기 버튼을 누르면 진행될 메서드를 작성해준다.
onSubmit() {
const self = this;
const form = new FormData();
//전화번호 11자리로 고정
if (self.phone.replace(/[^0-9]/g, '').length !== 11) {
alert('전화번호는 11자리의 숫자로만 입력해야 합니다.');
return;
} else if (!self.phone.startsWith('010')) {
alert('전화번호 형식이 잘 못 되었습니다');
return;
} else {
form.append('phone', self.phone.replace(/[^0-9]/g, ''));
}
form.append('email', self.form.email);
form.append('nickname', self.form.nickname);
form.append('pwd', self.form.pwd)
form.append('id', 1)
if (document.getElementById('img-input-file').value !== '') {
const file = document.getElementById('img-input-file').files[0];
form.append('f', file);
}
self.$axios.post('http://localhost:8181/members', form, { headers: { "Content-Type": "multipart/form-data" } })
.then(function (res) {
if (res.status === 200) {
let dto = res.data.dto;
console.log(dto);
self.klogin();
} else {
alert('에러코드 :' + res.status);
}
})
.catch(function (error) {
alert('에러 :' + error);
});
},
자동로그인 진행
만약에 회원가입이 되어 있다면 회원가입을 지나쳐 바로 로그인을 시켜주어야 한다. 따라서 아이디가 있는지 미리 getToken() 메서드에서 확인하였고 아이디가 저장되어 있다면 klogin() 아래의 메서드를 통해 자동으로 로그인을 시켜준다.
klogin() { //아이디 저장이 되어 있으면 갈 곳
const self = this;
const loginform = new FormData();
loginform.append('email', self.form.email)
loginform.append('pwd', self.form.pwd)
self.$axios.post('http://localhost:8181/members/login', loginform)
.then(function (res) { //결과
if (res.status == 200) {
sessionStorage.setItem('token', res.data.token)
sessionStorage.setItem('loginId', res.data.loginId)
const addform = new FormData();
addform.append('email', self.form.email)
addform.append('token', self.form.kakaotoken)
console.log(self.form.kakaotoken)
self.$axios.post('http://localhost:8181/tokensave', addform)
.then(function (rep) {
if (rep.status == 200) {
location.href="/calendar"
} else {
alert ('여기서 오류다~ ')
}
});
}
})
},
이렇게 vue.js (프론트)에서 해야 할 일이 모두 끝이 났다. 7에는 backend에서 어떻게 카카오에게 토큰값을 요청하고 사용자 정보를 받아오는지 정리하겠다~
'프로젝트 > Plan + tiful (플랜티플)' 카테고리의 다른 글
vue.js 애니메이션 적용된 네비게이션 바 만들기 (0) | 2023.07.12 |
---|---|
[Rest Api] 카카오톡 로그인 api 구현 (7) - java 최종 코드 (0) | 2023.07.11 |
[Rest Api] vue와 Spring boot를 이용한 카카오톡 로그인 api 구현 (5) - 가져온 사용자 정보를 DB에 저장하기 (0) | 2023.07.07 |
[Rest Api] vue와 Spring boot를 이용한 카카오톡 로그인 api 구현 (4) - 응답 받은 토큰 값으로 사용자 정보 가져오기 (0) | 2023.07.05 |
[Rest Api] vue와 Spring boot를 이용한 카카오톡 로그인 api 구현 (3) - 토큰 값 요청 후 응답 파싱 하기 (0) | 2023.07.04 |