Bläddra i källkod

:construction: Got reissuing of token into jwt strategy...needs to switched again?

tags/0.0.3^2
tomit4 2 år sedan
förälder
incheckning
549de038d1

+ 36
- 11
backend/lib/auth/strategies/jwt.js Visa fil

@@ -11,28 +11,54 @@ const hashToken = async token => {
11 11
     }
12 12
 }
13 13
 
14
+const createToken = (data, expiration = 600) => {
15
+    const key = process.env.APP_SECRET
16
+    const obj = {}
17
+
18
+    Object.assign(obj, { ...data })
19
+    return JWT.sign(obj, key, { expiresIn: expiration })
20
+}
21
+
22
+const validateToken = token => {
23
+    const key = process.env.APP_SECRET
24
+    try {
25
+        return JWT.verify(token, key)
26
+    } catch (err) {
27
+        return { payload: null, message: err.message }
28
+    }
29
+}
30
+
14 31
 module.exports = options => {
15 32
     return {
16 33
         key: options.jwtKey,
17 34
         verifyOptions: {
18 35
             algorithms: ['HS256'],
19 36
         },
20
-        //  TODO: Always check rawAccessToken, if it fails, we check the session, if
21
-        // session is valid, then we reissue it if session is NOT valid, DELETE
22
-        // the session (and kick user back to login)
23
-        // TODO: set up cron job to occassionaly clean up activeSessions
37
+        // TODO: Naming conventions need to be reversed again??
24 38
         validate: async (decoded, request, h) => {
25 39
             const accessTokenFromHeaders = request.headers.authorization
26 40
             const hashedAccessTokenFromHeaders = await hashToken(
27 41
                 accessTokenFromHeaders,
28 42
             )
29
-            const accessToken =
30
-                request.server.app.activeSessions[hashedAccessTokenFromHeaders]
31
-                    .accessToken
32
-            const sessionToken =
43
+            const activeSession =
33 44
                 request.server.app.activeSessions[hashedAccessTokenFromHeaders]
34
-                    .sessionToken
35
-            console.log('sessionToken from jwt strategy :=>', sessionToken)
45
+            if (!activeSession)
46
+                throw new Error(
47
+                    `No session found for ${hashedAccessTokenFromHeaders}`,
48
+                )
49
+
50
+            const accessToken = activeSession.accessToken
51
+            const sessionToken = activeSession.sessionToken
52
+            const validatedAccessToken = validateToken(accessToken)
53
+            const validatedSessionToken = validateToken(sessionToken)
54
+            if (!validatedSessionToken.payload) {
55
+                console.log('sessionToken no longer valid, reissuing... ')
56
+                activeSession.sessionToken = createToken(
57
+                    { payload: validatedAccessToken.payload },
58
+                    // NOTE: Expiration of new sessionToken set for 200 seconds (testing)
59
+                    100,
60
+                )
61
+            }
36 62
             try {
37 63
                 const validatedJwt = JWT.verify(
38 64
                     accessToken,
@@ -40,7 +66,6 @@ module.exports = options => {
40 66
                 )
41 67
                 return { isValid: true, credentials: validatedJwt.email }
42 68
             } catch (err) {
43
-                console.error('ERROR :=>', err)
44 69
                 return { isValid: false, error: err.message }
45 70
             }
46 71
         },

+ 0
- 14
backend/lib/routes/profile/insert.js Visa fil

@@ -19,19 +19,6 @@ const responseSchemas = {
19 19
     error: errorSchema.single,
20 20
 }
21 21
 
22
-const validators = {
23
-    /** Validate the header (cookie check) */
24
-    // headers: true,
25
-
26
-    /** Validate the route params (/active/{thing}) */
27
-    params: params.profileId,
28
-
29
-    /** Validate the route query (/active/{thing}?limit=10&offset=10) */
30
-    // query: true,
31
-    /** Validate the incoming payload (POST method) */
32
-    payload: responseSchemas.responses,
33
-}
34
-
35 22
 module.exports = {
36 23
     method: 'POST',
37 24
     path: '/{profile_id}/insert/{response_key_id?}',
@@ -76,7 +63,6 @@ module.exports = {
76 63
 
77 64
         /** Validate based on validators object */
78 65
         validate: {
79
-            ...validators,
80 66
             failAction: 'log',
81 67
         },
82 68
 

+ 2
- 1
backend/lib/routes/user/getaccess.js Visa fil

@@ -26,7 +26,8 @@ module.exports = {
26 26
         handler: async function (request, h) {
27 27
             const { userService } = request.server.services()
28 28
             const res = request.payload
29
-            const accessToken = await userService.createToken(res)
29
+            // NOTE: Access Token set for 5 minutes expiration (default)
30
+            const accessToken = await userService.createToken(res, 600)
30 31
             try {
31 32
                 const response = h.response({
32 33
                     ok: true,

+ 3
- 42
backend/lib/services/user.js Visa fil

@@ -247,44 +247,6 @@ module.exports = class UserService extends Schmervice.Service {
247 247
             return { payload: null, message: err.message }
248 248
         }
249 249
     }
250
-    /*
251
-     * Grabs the sessionToken and accessToken from the
252
-     * this.activeSessions object based off of provided hashedToken
253
-     * @params {UserSession}
254
-     * @returns {grabTokensFromActiveSession}
255
-     */
256
-    _grabTokensFromActiveSessions(userSession) {
257
-        const rawSessionToken = userSession.sessionToken
258
-        const accessToken = userSession.accessToken
259
-        return { rawSessionToken: rawSessionToken, accessToken: accessToken }
260
-    }
261
-    /**
262
-     * Helper function to validate both tokens grabbed from this.activeSessions
263
-     * @params {Tokens}
264
-     * @returns {ValidatedTokens}
265
-     */
266
-    _validateTokens(tokens) {
267
-        const sessionTokenIsValid = this.validateToken(tokens.rawSessionToken)
268
-        const accessTokenIsValid = this.validateToken(tokens.accessToken)
269
-        return {
270
-            sessionTokenIsValid: sessionTokenIsValid,
271
-            accessTokenIsValid: accessTokenIsValid,
272
-        }
273
-    }
274
-    /**
275
-     * Checks to see if the activeSession accessToken is expired
276
-     * If it is, it creates a new one and stores it in activeSession
277
-     * @ params {UserSession} {ValidatedTokens}
278
-     * @returns Void
279
-     */
280
-    _createSessionTokenIfExpired(userSession, validatedTokens) {
281
-        if (!validatedTokens.sessionTokenIsValid.payload) {
282
-            const sessionToken = this.createToken({
283
-                payload: validatedTokens.accessTokenIsValid.payload,
284
-            })
285
-            userSession.sessionToken = sessionToken
286
-        }
287
-    }
288 250
     /**
289 251
      * Uses this.validateToken() to verify hashedSessionToken's
290 252
      * existence, expiry, and also valdiates accessToken
@@ -298,11 +260,10 @@ module.exports = class UserService extends Schmervice.Service {
298 260
                 'hashedSessionToken not in activeSessions registry!',
299 261
             )
300 262
         }
301
-        const tokens = this._grabTokensFromActiveSessions(userSession)
302
-        const validatedTokens = this._validateTokens(tokens)
303
-        this._createSessionTokenIfExpired(userSession, validatedTokens)
263
+        const accessToken = userSession.accessToken
264
+        const accessTokenIsValid = this.validateToken(accessToken)
304 265
         return {
305
-            ...validatedTokens.accessTokenIsValid.payload,
266
+            ...accessTokenIsValid.payload,
306 267
             accessToken: this.activeSessions[hashedAccessToken].accessToken,
307 268
         }
308 269
     }

Laddar…
Avbryt
Spara