Sfoglia il codice sorgente

:sparkles: working jwt tokens

jwt
toj 3 anni fa
parent
commit
7705105a24

+ 5
- 10
backend/lib/auth/strategies/jwt.js Vedi File

@@ -2,21 +2,16 @@
2 2
 
3 3
 module.exports = options => {
4 4
     return {
5
-        keys: {
6
-            key: options.jwtKey,
5
+        key: options.jwtKey,
6
+        verifyOptions: {
7 7
             algorithms: ['HS256'],
8 8
         },
9
-        verify: {
10
-            aud: 'urn:audience:test',
11
-            iss: 'urn:issuer:test',
12
-            sub: false,
13
-            maxAgeSec: 14400, // 4 hours
14
-        },
15
-        validate: (artifacts, request, h) => {
9
+        validate: (decoded, request, h) => {
10
+            console.log('decoded :>> ', decoded)
16 11
             try {
17 12
                 return {
18 13
                     isValid: true,
19
-                    credentials: { user: artifacts.decoded.payload.user },
14
+                    credentials: { user: decoded.user_email },
20 15
                 }
21 16
             } catch (err) {
22 17
                 console.error(err)

+ 1
- 1
backend/lib/plugins/user.js Vedi File

@@ -1,7 +1,7 @@
1 1
 const Objection = require('objection')
2 2
 const Schmervice = require('@hapipal/schmervice')
3 3
 const Schwifty = require('@hapipal/schwifty')
4
-const Jwt = require('@hapi/jwt')
4
+const Jwt = require('hapi-auth-jwt2')
5 5
 const JwtStrategy = require('../auth/strategies/jwt')
6 6
 
7 7
 const UserModel = require('../models/user')

+ 1
- 1
backend/lib/routes/health/get.js Vedi File

@@ -12,7 +12,7 @@ const pluginConfig = {
12 12
     },
13 13
     opts: {
14 14
         tags: ['api'],
15
-        auth: { strategy: 'default_jwt' },
15
+        auth: 'default_jwt',
16 16
         cors: true,
17 17
     },
18 18
 }

+ 13
- 1
backend/lib/routes/user/login.js Vedi File

@@ -15,6 +15,14 @@ const pluginConfig = {
15 15
         auth: false,
16 16
         cors: true,
17 17
     },
18
+    cookieOpts: {
19
+        ttl: 1 * 24 * 60 * 60 * 1000,
20
+        encoding: 'none',
21
+        isHttpOnly: true,
22
+        clearInvalid: true,
23
+        strictHeader: true,
24
+        isSecure: true,
25
+    },
18 26
 }
19 27
 
20 28
 /** Validator functions by request method */
@@ -38,7 +46,6 @@ module.exports = {
38 46
         handler: async function (request, h) {
39 47
             try {
40 48
                 const { userService } = request.services()
41
-
42 49
                 const res = request.payload
43 50
 
44 51
                 // Callback to use as transaction
@@ -54,8 +61,13 @@ module.exports = {
54 61
 
55 62
                 // Bound context from your plugin server declaration
56 63
                 const user = await h.context.transaction(login)
64
+
57 65
                 const token = userService.createToken(user)
58 66
 
67
+                const response = h.response('success')
68
+                console.log('response :>> ', response)
69
+                response.header('Authorization', token)
70
+                response.state('token', token, pluginConfig.cookieOpts)
59 71
                 return {
60 72
                     ok: true,
61 73
                     handler: pluginConfig.handlerType,

+ 4
- 16
backend/lib/services/user.js Vedi File

@@ -1,7 +1,7 @@
1 1
 'use strict'
2 2
 require('dotenv').config()
3 3
 const Util = require('util')
4
-const Jwt = require('@hapi/jwt')
4
+const JWT = require('jsonwebtoken')
5 5
 const Schmervice = require('@hapipal/schmervice')
6 6
 const SecurePassword = require('secure-password')
7 7
 
@@ -143,21 +143,9 @@ module.exports = class UserService extends Schmervice.Service {
143 143
      */
144 144
     createToken(user) {
145 145
         const key = this.server.registrations['main-app-plugin'].options.jwtKey
146
-
147
-        return Jwt.token.generate(
148
-            {
149
-                aud: 'urn:audience:test',
150
-                iss: 'urn:issuer:test',
151
-                email: user.user_email,
152
-            },
153
-            {
154
-                key: key,
155
-                algorithm: 'HS256',
156
-            },
157
-            {
158
-                ttlSec: 14400, // 4 hours
159
-            },
160
-        )
146
+        const obj = {}
147
+        Object.assign(obj, { ...user })
148
+        return JWT.sign(obj, key)
161 149
     }
162 150
 
163 151
     /**

+ 63
- 29
backend/package-lock.json Vedi File

@@ -549,15 +549,6 @@
549 549
                 "@hapi/hoek": "9.x.x"
550 550
             }
551 551
         },
552
-        "@hapi/catbox-object": {
553
-            "version": "2.0.0",
554
-            "resolved": "https://registry.npmjs.org/@hapi/catbox-object/-/catbox-object-2.0.0.tgz",
555
-            "integrity": "sha512-tzTo5q9UVqwqtpNkIz0VNSmJTbaGyD9ZQmw4a91BBWB+YJWYa066KkxOTHGmmWJzjZEhG2CsNYKu34J25pA5aw==",
556
-            "requires": {
557
-                "@hapi/boom": "9.x.x",
558
-                "@hapi/hoek": "9.x.x"
559
-            }
560
-        },
561 552
         "@hapi/content": {
562 553
             "version": "5.0.2",
563 554
             "resolved": "https://registry.npmjs.org/@hapi/content/-/content-5.0.2.tgz",
@@ -654,23 +645,6 @@
654 645
                 "@hapi/hoek": "9.x.x"
655 646
             }
656 647
         },
657
-        "@hapi/jwt": {
658
-            "version": "2.0.1",
659
-            "resolved": "https://registry.npmjs.org/@hapi/jwt/-/jwt-2.0.1.tgz",
660
-            "integrity": "sha512-6/nX/yOIk9mvs+r72LFhF177yOB4yVv3e0Nqn7cIx2CU+VruBHxMKkHraARXx6oUAtiwNuyhW+trO5QeGm9ESQ==",
661
-            "requires": {
662
-                "@hapi/b64": "5.x.x",
663
-                "@hapi/boom": "9.x.x",
664
-                "@hapi/bounce": "2.x.x",
665
-                "@hapi/bourne": "2.x.x",
666
-                "@hapi/catbox-object": "2.x.x",
667
-                "@hapi/cryptiles": "5.x.x",
668
-                "@hapi/hoek": "9.x.x",
669
-                "@hapi/wreck": "17.x.x",
670
-                "ecdsa-sig-formatter": "1.x.x",
671
-                "joi": "^17.2.1"
672
-            }
673
-        },
674 648
         "@hapi/mimos": {
675 649
             "version": "6.0.0",
676 650
             "resolved": "https://registry.npmjs.org/@hapi/mimos/-/mimos-6.0.0.tgz",
@@ -1071,7 +1045,8 @@
1071 1045
             "dependencies": {
1072 1046
                 "ansi-regex": {
1073 1047
                     "version": "4.1.0",
1074
-                    "resolved": "",
1048
+                    "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
1049
+                    "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
1075 1050
                     "dev": true
1076 1051
                 },
1077 1052
                 "emoji-regex": {
@@ -1602,6 +1577,11 @@
1602 1577
                 "ieee754": "^1.1.13"
1603 1578
             }
1604 1579
         },
1580
+        "buffer-equal-constant-time": {
1581
+            "version": "1.0.1",
1582
+            "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
1583
+            "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA=="
1584
+        },
1605 1585
         "buffer-from": {
1606 1586
             "version": "1.1.1",
1607 1587
             "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
@@ -2044,6 +2024,11 @@
2044 2024
             "integrity": "sha1-fj5Iu+bZl7FBfdyihoIEtNPYVxU=",
2045 2025
             "dev": true
2046 2026
         },
2027
+        "cookie": {
2028
+            "version": "0.4.2",
2029
+            "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz",
2030
+            "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA=="
2031
+        },
2047 2032
         "copy-descriptor": {
2048 2033
             "version": "0.1.1",
2049 2034
             "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
@@ -3121,6 +3106,16 @@
3121 3106
                 "wordwrap": "^1.0.0"
3122 3107
             }
3123 3108
         },
3109
+        "hapi-auth-jwt2": {
3110
+            "version": "10.4.0",
3111
+            "resolved": "https://registry.npmjs.org/hapi-auth-jwt2/-/hapi-auth-jwt2-10.4.0.tgz",
3112
+            "integrity": "sha512-x733a6bdLSd0bMQeuvkENlNwLRHzsenhoUan7JQLEIizqTWPzPJtukixjx+LCLMyC/5BG3Si4npVB5mqfIMAog==",
3113
+            "requires": {
3114
+                "@hapi/boom": "^9.0.0",
3115
+                "cookie": "^0.4.0",
3116
+                "jsonwebtoken": "^9.0.0"
3117
+            }
3118
+        },
3124 3119
         "hapi-swagger": {
3125 3120
             "version": "14.5.5",
3126 3121
             "resolved": "https://registry.npmjs.org/hapi-swagger/-/hapi-swagger-14.5.5.tgz",
@@ -3797,12 +3792,52 @@
3797 3792
                 "minimist": "^1.2.5"
3798 3793
             }
3799 3794
         },
3795
+        "jsonwebtoken": {
3796
+            "version": "9.0.0",
3797
+            "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz",
3798
+            "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==",
3799
+            "requires": {
3800
+                "jws": "^3.2.2",
3801
+                "lodash": "^4.17.21",
3802
+                "ms": "^2.1.1",
3803
+                "semver": "^7.3.8"
3804
+            },
3805
+            "dependencies": {
3806
+                "semver": {
3807
+                    "version": "7.3.8",
3808
+                    "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
3809
+                    "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
3810
+                    "requires": {
3811
+                        "lru-cache": "^6.0.0"
3812
+                    }
3813
+                }
3814
+            }
3815
+        },
3800 3816
         "just-extend": {
3801 3817
             "version": "4.2.1",
3802 3818
             "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz",
3803 3819
             "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==",
3804 3820
             "dev": true
3805 3821
         },
3822
+        "jwa": {
3823
+            "version": "1.4.1",
3824
+            "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz",
3825
+            "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==",
3826
+            "requires": {
3827
+                "buffer-equal-constant-time": "1.0.1",
3828
+                "ecdsa-sig-formatter": "1.0.11",
3829
+                "safe-buffer": "^5.0.1"
3830
+            }
3831
+        },
3832
+        "jws": {
3833
+            "version": "3.2.2",
3834
+            "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz",
3835
+            "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==",
3836
+            "requires": {
3837
+                "jwa": "^1.4.1",
3838
+                "safe-buffer": "^5.0.1"
3839
+            }
3840
+        },
3806 3841
         "keyv": {
3807 3842
             "version": "3.1.0",
3808 3843
             "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz",
@@ -4246,8 +4281,7 @@
4246 4281
         "ms": {
4247 4282
             "version": "2.1.3",
4248 4283
             "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
4249
-            "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
4250
-            "dev": true
4284
+            "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
4251 4285
         },
4252 4286
         "mysql": {
4253 4287
             "version": "2.18.1",

+ 2
- 1
backend/package.json Vedi File

@@ -20,7 +20,6 @@
20 20
         "@hapi/glue": "^8.0.0",
21 21
         "@hapi/hapi": "^20.1.3",
22 22
         "@hapi/inert": "^6.0.3",
23
-        "@hapi/jwt": "^2.0.1",
24 23
         "@hapi/vision": "^6.0.1",
25 24
         "@hapipal/confidence": "^6.0.1",
26 25
         "@hapipal/schmervice": "^2.0.0",
@@ -29,9 +28,11 @@
29 28
         "compute-cosine-similarity": "^1.0.0",
30 29
         "dotenv": "^10.0.0",
31 30
         "exiting": "^6.0.1",
31
+        "hapi-auth-jwt2": "^10.4.0",
32 32
         "hapi-swagger": "^14.5.5",
33 33
         "haversine": "^1.1.1",
34 34
         "joi": "^17.4.0",
35
+        "jsonwebtoken": "^9.0.0",
35 36
         "knex": "^0.21.19",
36 37
         "mysql": "^2.18.1",
37 38
         "objection": "^2.2.18",

Loading…
Annulla
Salva