config/passport.js에서 GoogleStrategy에서는 비밀번호를 받지 않기 때문에 user.js에서
if(!userSchema.path('password')){
비밀번호 존재 여부로 google login과 local login을 구분하여 유효성 검사를 시행하도록 함. 테스트 완료
구글로그인 가입시 username이 profile.id로 되어있어 가입시 긴 숫자id로 이름이 정해졌는데 profile.displayName으로 수정하여 구글 아이디 닉네임이 뜨게 변경하였다. 각 요소 확인 방법은 구글로그인 시도시 console log가 뜨게끔 하면 어떤 로그인 시도가 있었는지 확인할 수 있게 된다.
2. coin을 userschema에 추가
models/user.js에 추가하면 된다. 형식은 Number
hasCTC:{
type:Number,
trim:true,
이런식으로
google login ,local login 시 table에 각각 0개로 새로이 저장되게끔 수정해주었다.
(google login은 passport.js에서, local login은 views의 회원가입(new.ejs)에서 추가함. readonly 태그로 수정못하게 막아놨는데 더 좋은 구현방법이 있을거같긴하다)
3. coin 거래소 추가, user인식 안되는 문제&해결
asset.ejs를 추가하였음. 경로는 처음엔 views/home/asset 이었으나 views/users/asset 으로 변경(이유는 추후 설명)
네비게이션 기능에 추가해준다.(partials/nav)
<li class="nav-item"><a href="/users/<%= currentUser.username %>/asset" class="nav-link">거래소</a></li>
처음에는 상시로 보이되 로그인하지 않고 누를경우 util.js의 util.isLoggedin을 통해 로그인 창으로 이동되게끔(+로그인하라는 경고문구 띄움) 하려는 의도였는데 user의 db가 넘어오지 않는 오류가 발생(구글링 결과 불러오는 순서 문제로 보인다)
해결 방안으로 nav 단계에서
<% if(isAuthenticated){ %>
아예 무조건 로그인이 되었을 경우에만 기능이 보이게끔 수정한 결과 정상적으로 db가 넘어와서 보유 자산과 코인 갯수가 보이게 되었다.
<ul class="navbar-nav ml-auto"> 로 묶여 있기에 (ml-auto => margin-left: auto;)
로그인 시에 보이는 기능들은 다 반대쪽에 모여있다.
코인 구매, 판매 기능은 아직 미구현이다. 이유는 최신 코인값에 대한 변수를 담은 코드가 바로 다음 4번에서 구현되었기 때문.
4. 코인 그래프 자체 갱신 문제&해결
지난 '로컬 JSON파일 로드 및 그래프 그리기' 에서
-> 향후 해결하여야할 문제
jupyter notebook이 아닌 JSON파일을 시간에 따라 수정하는 함수를 통해 JSON파일 자체 업데이트
라는 문제점을 인식하고 해결해보기로 했다.
우선, 이미 만든 4개의 코인, 1000개의 생성된 데이터에서 갱신을 위해 일정 시간마다 고정된 시간, 날짜, 간격에 주기적으로 작업을 실행해주는 node-cron을 설치하였다.
index.js 에서
const cron = require("node-cron");
을 통해 설치한 npm을 가져와주고 각각의 코인(i),x와y를 저장, 새 데이터를 push하고 새로이 views/home 내부에 있는 data.json을 다시 작성하는 형식이다.
routes/home.js 에서
text라는 변수를 선언
text = fs.readFileSync('views/home/data.json');
을 통해 데이터를 한번 읽어오고 일정 시간마다 파일을 다시 읽도록 node-cron을 다시 이용한다.[const cron = require("node-cron"); 작성 포함]
-> 향후 해결하여야할 문제
각 코인의 최신 값은 parsed_list['data'][i]['y']로 저장되어있는데 이를 통해 asset.ejs에서 최신 가격을 띄우고 보유 코인이 있을 경우 총 자산 = 보유자산(원) + 코인값*갯수 로 나타내는 기능을 추가할 예정이다. 추가로 최신 가격을 통해 구매, 판매 기능도 추가해 볼 예정이다. asset.ejs만 해결하면 완성!
1. password validation 문제 & Google Login ID 수정
구글 로그인 방식이 유효성 검사를 주석처리하고 이루어졌기 때문에 수정을 함.
config/passport.js에서 GoogleStrategy에서는 비밀번호를 받지 않기 때문에 user.js에서
if(!userSchema.path('password')){
비밀번호 존재 여부로 google login과 local login을 구분하여 유효성 검사를 시행하도록 함. 테스트 완료
구글로그인 가입시 username이 profile.id로 되어있어 가입시 긴 숫자id로 이름이 정해졌는데 profile.displayName으로 수정하여 구글 아이디 닉네임이 뜨게 변경하였다. 각 요소 확인 방법은 구글로그인 시도시 console log가 뜨게끔 하면 어떤 로그인 시도가 있었는지 확인할 수 있게 된다.
2. coin을 userschema에 추가
models/user.js에 추가하면 된다. 형식은 Number
이런식으로 google login ,local login 시 table에 각각 0개로 새로이 저장되게끔 수정해주었다. (google login은 passport.js에서, local login은 views의 회원가입(new.ejs)에서 추가함. readonly 태그로 수정못하게 막아놨는데 더 좋은 구현방법이 있을거같긴하다)
3. coin 거래소 추가, user인식 안되는 문제&해결
asset.ejs를 추가하였음. 경로는 처음엔 views/home/asset 이었으나 views/users/asset 으로 변경(이유는 추후 설명)
네비게이션 기능에 추가해준다.(partials/nav)
<li class="nav-item"><a href="/users/<%= currentUser.username %>/asset" class="nav-link">거래소</a></li>
처음에는 상시로 보이되 로그인하지 않고 누를경우 util.js의 util.isLoggedin을 통해 로그인 창으로 이동되게끔(+로그인하라는 경고문구 띄움) 하려는 의도였는데 user의 db가 넘어오지 않는 오류가 발생(구글링 결과 불러오는 순서 문제로 보인다)
해결 방안으로 nav 단계에서
<% if(isAuthenticated){ %>
아예 무조건 로그인이 되었을 경우에만 기능이 보이게끔 수정한 결과 정상적으로 db가 넘어와서 보유 자산과 코인 갯수가 보이게 되었다.로그인 시에 보이는 기능들은 다 반대쪽에 모여있다.
코인 구매, 판매 기능은 아직 미구현이다. 이유는 최신 코인값에 대한 변수를 담은 코드가 바로 다음 4번에서 구현되었기 때문.
4. 코인 그래프 자체 갱신 문제&해결
지난 '로컬 JSON파일 로드 및 그래프 그리기' 에서
라는 문제점을 인식하고 해결해보기로 했다.
우선, 이미 만든 4개의 코인, 1000개의 생성된 데이터에서 갱신을 위해 일정 시간마다 고정된 시간, 날짜, 간격에 주기적으로 작업을 실행해주는 node-cron을 설치하였다.
index.js 에서 const cron = require("node-cron"); 을 통해 설치한 npm을 가져와주고 각각의 코인(i),x와y를 저장, 새 데이터를 push하고 새로이 views/home 내부에 있는 data.json을 다시 작성하는 형식이다.
routes/home.js 에서 text라는 변수를 선언
text = fs.readFileSync('views/home/data.json');
을 통해 데이터를 한번 읽어오고 일정 시간마다 파일을 다시 읽도록 node-cron을 다시 이용한다.[const cron = require("node-cron"); 작성 포함]
-> 향후 해결하여야할 문제
각 코인의 최신 값은 parsed_list['data'][i]['y']로 저장되어있는데 이를 통해 asset.ejs에서 최신 가격을 띄우고 보유 코인이 있을 경우 총 자산 = 보유자산(원) + 코인값*갯수 로 나타내는 기능을 추가할 예정이다. 추가로 최신 가격을 통해 구매, 판매 기능도 추가해 볼 예정이다. asset.ejs만 해결하면 완성!