Explorar el Código

finish id_token processing

Starink hace 6 años
padre
commit
6efbd14ccf
Se han modificado 7 ficheros con 115 adiciones y 21 borrados
  1. 47 5
      middleware/auth.js
  2. 2 1
      nuxt.config.js
  3. 1 0
      package.json
  4. 2 1
      pages/error.vue
  5. 19 7
      server/controller/auth.js
  6. 22 6
      store/index.js
  7. 22 1
      yarn.lock

+ 47 - 5
middleware/auth.js

@@ -1,12 +1,19 @@
 import { mapMutations } from 'vuex'
+import jwt from 'jsonwebtoken'
 
-export default function ({route, store, req, res, redirect, next}) {
+export default function (context) {
+  const {app, route, store, req, res, requset, redirect, next} = context;
   let isClient = process.client;
   let isServer = process.server;
   let token, path;
 
+  // res.setHeader("Access-Control-Allow-Origin", "http://localhost:3000");
+  // res.setHeader("Access-Control-Allow-Credentials", true);
+
   token = store.state.token;
+  console.log('token', token);
 
+  // console.log("cookies", cook);
   //在服务端
   if (isServer) {
     path = req.originalUrl;
@@ -18,12 +25,47 @@ export default function ({route, store, req, res, redirect, next}) {
 
   console.log("path:"+path);
   let mainPath = path.split("?")[0];
+  console.log('mainPath', mainPath);
+
+  if(mainPath === "/setToken"){
+    try{
+      // console.log("req.query", res.query);
+      const params = path.split("?")[1].split('&');
+      let obj = {};
+      if(params.length !== 5
+        || params[0].split("=")[0] !== "origin_path"
+        || params[1].split("=")[0] !== "token"
+        || params[2].split("=")[0] !== "id"
+        || params[3].split("=")[0] !== "name"
+        || params[4].split("=")[0] !== "phone"
+      ){
+        redirect('/error');
+      }else{
+        for(let i = 0; i < 5 ; i++){
+          obj[params[i].split("=")[0]] = params[i].split("=")[1];
+
+        }
+        console.log('obj', obj);
+        let new_token = obj['token'];
+        let origin_path = obj['origin_path'];
+        let user = {id: obj['id'], name: obj['name'], phone: obj['phone']};
+
+        app.$cookies.set('token', new_token);
+        app.$cookies.set('user', user);
 
-  if (!token && mainPath !== "/" && mainPath !=="/login" && mainPath !== "/register" && mainPath !=="/error" && mainPath !== "/api/receiveIDToken") {
+        console.log('origin_path', origin_path);
+        redirect(origin_path);
+      }
+
+    }catch (e) {
+      console.log("e: ", e);
+      redirect('/error');
+    }
+  }
+
+  else if (!token && mainPath !== "/" && mainPath !=="/login" && mainPath !== "/register" && mainPath !=="/error" && mainPath !== "/api/receiveIDToken") {
     redirect('/api/authenticate?path=' + mainPath);
 
-  }else{
-    console.log("next");
-    next();
   }
+
 }

+ 2 - 1
nuxt.config.js

@@ -43,7 +43,8 @@ module.exports = {
   */
   modules: [
     '@nuxtjs/axios',
-    '@nuxtjs/style-resources'
+    '@nuxtjs/style-resources',
+    'cookie-universal-nuxt'
   ],
 
   router: {

+ 1 - 0
package.json

@@ -18,6 +18,7 @@
     "@vue-space/icons": "^0.0.1-alpha.2",
     "@vue-space/styles": "^0.0.1-alpha.2",
     "axios": "^0.19.2",
+    "cookie-universal-nuxt": "^2.1.3",
     "cross-env": "^5.2.0",
     "element-ui": "^2.4.11",
     "jsonwebtoken": "^8.5.1",

+ 2 - 1
pages/error.vue

@@ -4,7 +4,8 @@
 
 <script>
   export default {
-    name: "error"
+    name: "error",
+    layout: "blank",
   };
 </script>
 

+ 19 - 7
server/controller/auth.js

@@ -10,6 +10,7 @@ class AuthController{
       }else{
         jwt.verify(id_token, 'SEEC-1919810-OIDC-114514', (err, authData) => {
           if(err) {
+            console.log("err:", err);
             ctx.redirect("/error");
           }
           else {
@@ -28,14 +29,24 @@ class AuthController{
                 name: claims[1],
                 phone: claims[2]
               };
-              console.log("user:", user);
               let my_token = jwt.sign(
-                user,'seec',{ expiresIn: '1day' }
+                user,'seec-portal',{ expiresIn: '1day' }
               );
-              ctx.cookies.set('my_token', my_token);
+
+              // ctx.res.setHeader("Access-Control-Allow-Origin", "http://localhost:3000");
+              // ctx.res.setHeader("Access-Control-Allow-Credentials", true);
+
+              // ctx.cookies.user = user;
+              // ctx.cookies.token = my_token;
+              //
+              // console.log("origin_path", origin_path)
+              //
+              // ctx.redirect(origin_path);
+
+              let url = '/setToken?origin_path=' + origin_path + '&token=' + my_token + '&id=' + user.id + '&name=' + user.name + '&phone=' + user.phone;
               // store.commit("saveUser", user);
               // store.commit("saveToken", my_token);
-              ctx.redirect(origin_path);
+              ctx.redirect(url);
             }
           }
         });
@@ -49,16 +60,17 @@ class AuthController{
     const {path} = query;
 
     let return_uri = encodeURIComponent("http://localhost:8000/api/receiveIDToken");
-    console.log("encoded path");
     let url = 'http://localhost:3000/api/interaction?'+
       'client_id='+ 'seec-portal' +
       '&scope=openid' +
       '&redirect_uri=' + return_uri +
       '&response_type=code';
 
-    ctx.cookies.set("origin_path", path);
+    // ctx.cookies.set("origin_path", path);
+
+    console.log("redirect to " + url);
 
-    ctx.redirect(url);
+    return ctx.redirect(url);
   }
 
 }

+ 22 - 6
store/index.js

@@ -1,15 +1,31 @@
 export const state = () => ({
   user: {},
-  token: null,
-  origin_path: '/'
-})
+  token: null
+});
 
 export const getters = {
 
 }
 
 export const mutations = {
-  saveUser: (state, user) => (state.user = user),
-  saveToken: (state, token) => (state.token = token),
-  saveOriginPath: (state, path) => (state.origin_path = path)
+  saveUser(state, user){
+    state.user = user;
+  },
+  saveToken(state, token) {
+    state.token = token;
+  }
 }
+
+export const actions = {
+  nuxtServerInit({ commit}, { req, app }) {
+    const token = app.$cookies.get('token');
+    const user = app.$cookies.get('user');
+    console.log('cookie', token, user);
+    if (user){
+      commit('saveUser', user)
+    }
+    if(token){
+      commit('saveToken', token);
+    }
+  }
+};

+ 22 - 1
yarn.lock

@@ -1246,6 +1246,11 @@
   resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0"
   integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==
 
+"@types/cookie@^0.3.3":
+  version "0.3.3"
+  resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.3.3.tgz#85bc74ba782fb7aa3a514d11767832b0e3bc6803"
+  integrity sha512-LKVP3cgXBT9RYj+t+9FDKwS5tdI+rPBXaNSkma7hvqy35lc7mAokC2zsqWJH0LaqIt3B962nuYI77hsJoT1gow==
+
 "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0":
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff"
@@ -2856,7 +2861,23 @@ cookie-signature@1.0.6:
   resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
   integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw=
 
-cookie@0.4.0:
+cookie-universal-nuxt@^2.1.3:
+  version "2.1.3"
+  resolved "https://registry.yarnpkg.com/cookie-universal-nuxt/-/cookie-universal-nuxt-2.1.3.tgz#f850df248c7225646554ea4255c696e69060e0e2"
+  integrity sha512-oiEwBZ3JWfXZbpukxFLHp2K7bUKRpA3XpzxXnmwtLECKECWfrf3ze4V9G18bK05ULvSHo2Ao/mVrlx0/TPkuRQ==
+  dependencies:
+    "@types/cookie" "^0.3.3"
+    cookie-universal "^2.1.3"
+
+cookie-universal@^2.1.3:
+  version "2.1.3"
+  resolved "https://registry.yarnpkg.com/cookie-universal/-/cookie-universal-2.1.3.tgz#b5bb6fb32c7d1d631d5c94c58fae6e7709600044"
+  integrity sha512-9NTCd4DO0m+okpeCMejxWTGFIyPUL7qGye3HWfrgmQY67VET0xw9utYdscCmmrSerSDj2ntvqTQ86pw317al+g==
+  dependencies:
+    "@types/cookie" "^0.3.3"
+    cookie "^0.4.0"
+
+cookie@0.4.0, cookie@^0.4.0:
   version "0.4.0"
   resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba"
   integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==