tum 2 years ago
parent
commit
86294d3e78
3 changed files with 116 additions and 34 deletions
  1. 1 1
      src/components/LoginForm.vue
  2. 45 0
      src/composable/settings.ts
  3. 70 33
      src/views/ProfilePage.vue

+ 1 - 1
src/components/LoginForm.vue

28
 const login = async () => {
28
 const login = async () => {
29
   try{
29
   try{
30
     const data = await userLogin(username.value, password.value)
30
     const data = await userLogin(username.value, password.value)
31
-    emit('userLogin', {data:data})
31
+    emit('userLogin', {key:data.key})
32
   }
32
   }
33
   catch(error){
33
   catch(error){
34
     console.info("error ", error)
34
     console.info("error ", error)

+ 45 - 0
src/composable/settings.ts

271
   console.log("facebook login = ", data)
271
   console.log("facebook login = ", data)
272
   return data
272
   return data
273
 }
273
 }
274
+export const ggLogin = async(access_token, id_token) => {
275
+
276
+  const token = await Preferences.get({ key: 'token' });
277
+  console.log("access_code = ", access_token)
278
+  console.log("id token = ", id_token)
279
+  const { data } = await axios.post(BASE_URL + 'dj-rest-auth/google/',{access_token: access_token}, {
280
+    headers: {
281
+      'Content-Type': 'application/json', 
282
+    }
283
+  }).catch((error) => {
284
+    console.log("gg error = ", error)
285
+  })
286
+  console.log("gg login = ", data)
287
+  return data
288
+}
274
 export const userLogin = async(username, password) => {
289
 export const userLogin = async(username, password) => {
275
 
290
 
276
   const { data } = await axios.post(BASE_URL + 'dj-rest-auth/login/',{username: username, password: password}, {
291
   const { data } = await axios.post(BASE_URL + 'dj-rest-auth/login/',{username: username, password: password}, {
303
 }
318
 }
304
 export const isLogin = async() => {
319
 export const isLogin = async() => {
305
   const { value } = await Preferences.get({ key: 'user_token' });
320
   const { value } = await Preferences.get({ key: 'user_token' });
321
+  console.log('-- is Login --')
322
+  console.log(value)
306
   if( value ) 
323
   if( value ) 
307
     return true
324
     return true
308
   else
325
   else
333
   })
350
   })
334
   return data
351
   return data
335
 }
352
 }
353
+
354
+
355
+export const getPref = async () => {
356
+  const token = await Preferences.get({ key: 'token' });
357
+  console.log("token = ", token)
358
+  const { data } = await axios.get(BASE_URL + `backend/api/profiles/myprofile/`, {
359
+    headers: { 
360
+    'Authorization': `Token ${token.value}`
361
+    }
362
+  })
363
+  //await Preferences.set({
364
+    //key: 'profile', 
365
+    //value: data 
366
+  //})
367
+  //console.info(data)
368
+  return data
369
+}
370
+export const likeCourse = async (cid) => {
371
+  const token = await Preferences.get({ key: 'token' });
372
+  console.log("token = ", token)
373
+  const { data } = await axios.get(BASE_URL + `backend/api/profiles/like_course/?cid=${cid}`, {
374
+    headers: { 
375
+    'Authorization': `Token ${token.value}`
376
+    }
377
+  })
378
+  console.info(data)
379
+  return data
380
+}

+ 70 - 33
src/views/ProfilePage.vue

9
       <!--
9
       <!--
10
       <ion-button @click='clear'>Clear Pref</ion-button>
10
       <ion-button @click='clear'>Clear Pref</ion-button>
11
       <ion-button @click='btnLogout'>Btn Logout</ion-button> -->
11
       <ion-button @click='btnLogout'>Btn Logout</ion-button> -->
12
-      <template v-if="isLogin">
12
+      <template v-if="refIsLogin && myprofile">
13
+        
13
         <ion-list>
14
         <ion-list>
14
           <ion-list-header>
15
           <ion-list-header>
15
             <ion-label>Notifications</ion-label>
16
             <ion-label>Notifications</ion-label>
24
             <ion-label>Select Courses You like</ion-label>
25
             <ion-label>Select Courses You like</ion-label>
25
           </ion-list-header>
26
           </ion-list-header>
26
           <ion-item>
27
           <ion-item>
27
-          <ion-select aria-label="Fruit" placeholder="Select all fruits that apply" 
28
+          <ion-select aria-label="Training Courses" placeholder="Select Course You like" 
28
               :compareWith="compareWith" @ionChange="handleChange($event)">
29
               :compareWith="compareWith" @ionChange="handleChange($event)">
29
             <ion-select-option :value="c" v-for="c in list_courses">{{ c.name }}</ion-select-option>
30
             <ion-select-option :value="c" v-for="c in list_courses">{{ c.name }}</ion-select-option>
30
           </ion-select>
31
           </ion-select>
31
           </ion-item>
32
           </ion-item>
32
         </ion-list>
33
         </ion-list>
33
-        <div class='ion-padding'>
34
+        <div class='ion-padding' v-if="myprofile">
34
           <h1>I love ...</h1>
35
           <h1>I love ...</h1>
35
-          <ion-chip v-for="s in selecteds">
36
-            <ion-label>{{ s }}</ion-label>
36
+          <ion-chip v-for="s in myprofile.course_likes">
37
+            <ion-label>{{ s.name }}</ion-label>
37
             <ion-icon :icon="close" @click="removeItem(s)"></ion-icon>
38
             <ion-icon :icon="close" @click="removeItem(s)"></ion-icon>
38
           </ion-chip>
39
           </ion-chip>
39
         </div>
40
         </div>
57
               <ion-button @click='fbLogin' expand='full'>Facebook Login</ion-button>
58
               <ion-button @click='fbLogin' expand='full'>Facebook Login</ion-button>
58
             </ion-col>
59
             </ion-col>
59
             <ion-col size=6>
60
             <ion-col size=6>
60
-              <ion-button @click='ggLogin' expand='full'>Google Login</ion-button>
61
+              <ion-button @click='ggLoginClick' expand='full'>Google Login</ion-button>
61
             </ion-col>
62
             </ion-col>
62
           </ion-row>
63
           </ion-row>
63
         </ion-grid>
64
         </ion-grid>
65
+        <ion-text color="danger" v-if="formError">{{ formError }}</ion-text>
64
       </template>
66
       </template>
65
     </ion-content>
67
     </ion-content>
66
   </ion-page>
68
   </ion-page>
67
 </template>
69
 </template>
68
 
70
 
69
 <script setup lang="ts">
71
 <script setup lang="ts">
70
-import { IonPage, IonHeader, IonToolbar, IonTitle, IonContent, IonButton, onIonViewWillEnter, IonRow, IonCol, IonGrid, IonToggle, IonLabel, IonChip, IonIcon, IonSelect, IonSelectOption } from '@ionic/vue';
72
+import { IonPage, IonHeader, IonToolbar, IonTitle, IonContent, IonButton, onIonViewWillEnter, IonRow, IonCol, IonGrid, IonToggle, IonLabel, IonChip, IonIcon, IonSelect, IonSelectOption, IonList, IonListHeader, IonItem, IonText } from '@ionic/vue';
71
 import ExploreContainer from '@/components/ExploreContainer.vue';
73
 import ExploreContainer from '@/components/ExploreContainer.vue';
72
 import LoginForm from '@/components/LoginForm.vue';
74
 import LoginForm from '@/components/LoginForm.vue';
73
 import { defineComponent, onMounted } from 'vue';
75
 import { defineComponent, onMounted } from 'vue';
74
 import { GoogleAuth } from '@codetrix-studio/capacitor-google-auth';
76
 import { GoogleAuth } from '@codetrix-studio/capacitor-google-auth';
75
-import { facebookLogin, setUserToken, logout, clearPref, BASE_URL, listCourses } from '@/composable/settings';
77
+import { facebookLogin, setUserToken, logout, clearPref, BASE_URL, listCourses, getPref, likeCourse, isLogin, ggLogin } from '@/composable/settings';
76
 import { InAppBrowser } from '@capgo/inappbrowser'
78
 import { InAppBrowser } from '@capgo/inappbrowser'
77
 import { close, closeCircle, pin } from 'ionicons/icons';
79
 import { close, closeCircle, pin } from 'ionicons/icons';
78
 
80
 
97
   //'user_gender',
99
   //'user_gender',
98
 ];
100
 ];
99
 
101
 
100
-const isLogin = ref(false)
102
+const refIsLogin = ref(false)
101
 const liveNoti = ref(true)
103
 const liveNoti = ref(true)
102
 const favCourseNoti = ref(true)
104
 const favCourseNoti = ref(true)
103
 const newsNoti = ref(true)
105
 const newsNoti = ref(true)
104
 const list_courses = ref([])
106
 const list_courses = ref([])
105
-
107
+const formError = ref(null)
106
 const selecteds = ref([])
108
 const selecteds = ref([])
109
+const myprofile = ref()
107
 
110
 
108
 const openReset = async () => {
111
 const openReset = async () => {
109
   console.log("open Reset")
112
   console.log("open Reset")
111
   console.info("bw ", browser)
114
   console.info("bw ", browser)
112
   InAppBrowser.addListener("urlChangeEvent", urlChange)
115
   InAppBrowser.addListener("urlChangeEvent", urlChange)
113
 }
116
 }
114
-const removeItem = (s) => {
117
+const removeItem = async(s) => {
118
+  /*
115
   let temp = selecteds.value 
119
   let temp = selecteds.value 
116
   temp = temp.filter( e => e !== s)
120
   temp = temp.filter( e => e !== s)
117
   console.log(temp)
121
   console.log(temp)
118
-  selecteds.value = temp
122
+  selecteds.value = temp*/
123
+  myprofile.value  = await likeCourse(s.id)
119
 }
124
 }
120
 const urlChange = (event) => {
125
 const urlChange = (event) => {
121
   console.info("url change ", event)
126
   console.info("url change ", event)
129
   //accounts/password_reset/done/
134
   //accounts/password_reset/done/
130
 }
135
 }
131
 
136
 
132
-const ggLogin = async () => {
137
+const ggLoginClick = async () => {
138
+  console.log("ggLogin")
133
   const response = await GoogleAuth.signIn();
139
   const response = await GoogleAuth.signIn();
134
-  console.log(response);
135
-  console.log(response.accessToken)
136
-  if( response.authentication.accessToken ) {
137
-    isLogin.value = true
140
+  let t1 = response.authentication.accessToken;
141
+  let t2 = response.authentication.idToken;
142
+  let t3 = response.authentication.refreshToken;
143
+  let token = response.authentication.idToken
144
+  console.log(token)
145
+  if(response.authentication) {
146
+    try{ 
147
+      let d = await ggLogin(t1, t2)
148
+      await setUserToken(d.key)
149
+      myprofile.value  = await getPref()
150
+      refIsLogin.value = true
151
+      
152
+    }catch(error) {
153
+      formError.value = "Please Check Your UserId/Password"
154
+      console.log(error)
155
+    }
138
   }
156
   }
139
 }
157
 }
140
 
158
 
145
   console.log("-- fbLogin --")
163
   console.log("-- fbLogin --")
146
   console.info(result.accessToken)
164
   console.info(result.accessToken)
147
   if (result.accessToken) {
165
   if (result.accessToken) {
148
-    let d = await facebookLogin(result.accessToken)
149
-    console.log("facebook authen ", d)
150
-    await setUserToken(d.key)
151
-    
152
-    // Login successful.
153
-    isLogin.value = true
166
+    try{
167
+      let d = await facebookLogin(result.accessToken)
168
+      console.log("facebook authen ", d)
169
+      await setUserToken(d.key)
170
+      myprofile.value  = await getPref()
171
+      await getProfile()
172
+      // Login successful.
173
+      refIsLogin.value = true
174
+    }catch(error) {
175
+      formError.value = "Please Check Your UserId/Password"
176
+    }
154
     console.log(`Facebook access token is ${result.accessToken.token}`);
177
     console.log(`Facebook access token is ${result.accessToken.token}`);
155
   }
178
   }
156
 }
179
 }
157
 const fbLogout = async () => {
180
 const fbLogout = async () => {
158
   await FacebookLogin.logout();
181
   await FacebookLogin.logout();
159
-  isLogin.value = false
182
+  await GoogleAuth.signOut()
183
+  refIsLogin.value = false
160
   await logout()
184
   await logout()
161
 }
185
 }
162
 const btnLogout = async () => {
186
 const btnLogout = async () => {
163
-  isLogin.value = false
187
+  refIsLogin.value = false
164
   await logout()
188
   await logout()
165
 }
189
 }
166
 onIonViewWillEnter(async () => {
190
 onIonViewWillEnter(async () => {
191
+  console.log("ion view will enter")
192
+  console.log(await isLogin())
167
   const result = await (<FacebookLoginResponse>(
193
   const result = await (<FacebookLoginResponse>(
168
     FacebookLogin.getCurrentAccessToken()
194
     FacebookLogin.getCurrentAccessToken()
169
   ));
195
   ));
170
   console.log(result == undefined)
196
   console.log(result == undefined)
171
   if (result != undefined && result.accessToken) {
197
   if (result != undefined && result.accessToken) {
172
     console.log(`Facebook access token is ${result.accessToken.token}`);
198
     console.log(`Facebook access token is ${result.accessToken.token}`);
173
-    isLogin.value = true
199
+    refIsLogin.value = true
174
     await getProfile()
200
     await getProfile()
175
   }else {
201
   }else {
176
-    isLogin.value = false
202
+    refIsLogin.value = false
177
   }
203
   }
178
 
204
 
179
   list_courses.value = await listCourses()
205
   list_courses.value = await listCourses()
180
   ggCheckLogin()
206
   ggCheckLogin()
207
+  refIsLogin.value = await isLogin()
208
+  if( refIsLogin.value == true ) {
209
+    myprofile.value  = await getPref()
210
+  }
181
 
211
 
182
 })
212
 })
183
 const getProfile = async () => {
213
 const getProfile = async () => {
189
 }
219
 }
190
 const ggCheckLogin = async() => {
220
 const ggCheckLogin = async() => {
191
     GoogleAuth.refresh()
221
     GoogleAuth.refresh()
192
-        .then((data) => {
222
+        .then(async (data) => {
193
             if (data.accessToken) {
223
             if (data.accessToken) {
194
-                isLogin.value = true
224
+                refIsLogin.value = true
225
+                myprofile.value  = await getPref()
195
             }
226
             }
196
         })
227
         })
197
         .catch((error) => {
228
         .catch((error) => {
204
   await clearPref()
235
   await clearPref()
205
 }
236
 }
206
 const userLogin = async (data) => {
237
 const userLogin = async (data) => {
207
-  console.info("user login ", data)
238
+  console.info("user login = ", data)
239
+  console.info(data.key)
208
   if(data.error) {
240
   if(data.error) {
209
     console.log("ERROR")
241
     console.log("ERROR")
210
   }else {
242
   }else {
212
     await setUserToken(data.key)
244
     await setUserToken(data.key)
213
     
245
     
214
     // Login successful.
246
     // Login successful.
215
-    isLogin.value = true
247
+    refIsLogin.value = true
216
   }
248
   }
217
 }
249
 }
218
 
250
 
219
 const compareWith = (o1, o2) =>  {
251
 const compareWith = (o1, o2) =>  {
220
   return o1 && o2 ? o1.id === o2.id : o1 === o2;
252
   return o1 && o2 ? o1.id === o2.id : o1 === o2;
221
 }
253
 }
222
-const handleChange = (ev) =>{
254
+const handleChange = async (ev) =>{
223
   console.log('Current value:', ev.detail.value);
255
   console.log('Current value:', ev.detail.value);
224
-  selecteds.value.push(ev.detail.value.name)
256
+  let v = ev.detail.value
257
+  myprofile.value  = await likeCourse(v.id)
258
+  if( selecteds.value.indexOf(v.name) == -1 ) {
259
+    selecteds.value.push(v.name)
260
+  }
261
+
225
 }
262
 }
226
 </script>
263
 </script>