>
개인용 레퍼런스 사이트를 만들다보니, 각각의 내 부캐에 맞는 답변을 주는 AI, 챗GPT를 만들고 싶어졌다.
그런데 사이트를 전체 배포하려다보니, 모두가 접근 가능하다면 비용 감당이 안될 것 같다.
그래서 회원 관련 기능을 구현한 김에 특정 등급의 회원만 접근 가능하도록 만들었다.
※ 물론 DB에도 grade라는 필드를 만들어줬고, 회원 가입 시에는 자동으로 "normal"등급을 주도록 했다. "master"등급만 접근 가능하도록 설정할 예정이며, 일단 개인 사이트이기 때문에 master등급은 수동으로 설정할 예정이다. (회원등급을 변경할 수 있는 관리자페이지는 추후 필요하면 추가로 만들도록 할 예정이다. 솔직히 페이지를 하나 만들고, update_one만 하면 되는거라.)
파이썬 코드는 다음과 같다.
@bp.route("/api")
def chatgptapi():
token_receive = request.cookies.get('mytoken')
try:
payload = jwt.decode(token_receive, SECRET_KEY, algorithms=['HS256'])
userinfo = db.user.find_one({'email': payload['email']}, {'_id': 0, 'grade': 1})
grade = userinfo['grade'] if userinfo else None
except Exception as e:
print(f"Error decoding JWT: {e}")
return redirect(url_for('login.loginCall'))
return jsonify({'grade': grade})
우선 해당 페이지에 /api 경로의 라우터를 설정하고, 로그인 중이라면 jwt토큰을 갖고 있을 것이기에 이를 중심으로 payload했다.
userinfo를 불러올 때 email(id) 을 찾고, _id 값은 미노출하고, grade값은 노출하도록 했다.
※ _id값은 DB가 쌓일때마다 무작위로 생성되는 id값이기 때문에 이건 항상 기본으로 미노출(0)하도록 설정했었다.
참고로 except 구문에서의 에러코드는 아래와 같다.
처음 코딩할 때 뭐가 자꾸 안되어서, ChatGPT한테 물어보니, 아래와 같은 답변과 함께, print(f"Error decoding JWT: {e}) 문장을 추가해줬다.
그리고 자바스크립트에는 아래 문장을 추가했다.
$(document).ready(function () {
grade_check();
});
function grade_check() {
$.ajax({
type: "GET",
url: "/chatgpt/api",
data: {},
success: function (response) {
let grade = response['grade']
if (grade === 'master') {
console.log('성공')
} else {
alert("master 등급만 사용 가능합니다. 관리자에게 문의해주세요.")
$(location).attr('href', '/#footer');
}
},
error: function (xhr, status, error) {
console.error("Error occurred:", error);
alert("서버와 통신 중 오류가 발생했습니다. 다시 시도해 주세요.");
}
}
)
}
우선 페이지에 접속하자마자 실행되어야 하는 함수이기에 document.ready 를 사용했다.
그리고 접속한 페이지의 api url을 GET 방식으로 가져와 grade가 'master'라면 '성공'이란 콘솔로그를 찍고, 아니라면 얼럿창을 띄우면서 특정 페이지로 이동하도록 만들었다.
나는 파이썬에서 html파일을 render_template하도록 설정해놨기 때문에 jacascript에서 또 리다이렉트 설정해버리면, 무한루프에 빠지게 된다.
그렇기에 저렇게 사용한 것이니, 사용자에 맞춰 사용하길 바란다.
마지막으로 만약 에러가 뜨면 콘솔로그가 찍히도록 했다. 이것도 챗GPT한테 물어봤다.
난 개발하다가 궁금한게 생기면 일단 검색해보는데, 용어도 모르는 경우는 뭘 질문해야할지 모른다. 그럴경우 gpt와 대화하다보면 알게된다. 무작정 gpt한테만 물어보는 것도 답을 찾는 방법은 아니지만, 그래도 구글링과 gpt를 적절히 사용하면 굉장히 문제 해결이 빨라진다.
기상청 날씨 api를 확인해보자!(w. 공공데이터포털) (1) | 2024.11.01 |
---|---|
티스토리 RSS 피드를 내 사이트에 가져와보자!(aka. 웹 크릴링, ft. 프록시) (0) | 2024.10.30 |
회원 탈퇴 기능을 만들어보자! (0) | 2024.10.29 |
비밀번호 변경 기능을 만들어보자! (ft. JWT 암호화/복호화) (0) | 2024.10.28 |
회원 로그인 기능을 만들어보자! (쿠키값 생성 및 유지 - ft. JWT 토큰) (0) | 2024.10.28 |