Преглед изворни кода

:sparkles: fleshing out login responses

master
TOJ пре 5 година
родитељ
комит
f7456836bb

+ 6
- 6
backend/lib/index.js Прегледај датотеку

@@ -1,5 +1,3 @@
1
-const Jwt = require('@hapi/jwt');
2
-const AuthStratgey = require('./auth/strategies/jwt')
3 1
 const UserPlugin = require('./plugins/user');
4 2
 const TestPlugin = require('./plugins/test');
5 3
 
@@ -7,10 +5,12 @@ exports.plugin = {
7 5
     name: 'main-app-plugin',
8 6
     register: async (server, options) => {
9 7
 
10
-        await server.register(TestPlugin, {})
11
-
12
-        await server.register(UserPlugin, {})
13
-
8
+        await server.register(TestPlugin, {
9
+            routes: { prefix: `/test` }
10
+        })
14 11
 
12
+        await server.register(UserPlugin, {
13
+            routes: { prefix: `/user` }
14
+        })
15 15
     },
16 16
 }

+ 3
- 1
backend/lib/models/user.js Прегледај датотеку

@@ -6,7 +6,9 @@ module.exports = class User extends Schwifty.Model {
6 6
     static get joiSchema() {
7 7
         return Joi.object({
8 8
             id: Joi.number().required(),
9
-            name: Joi.string().required()
9
+            name: Joi.string().required(),
10
+            email: Joi.string().required(),
11
+            password: Joi.string().required(),
10 12
         })
11 13
     }
12 14
 }

+ 3
- 0
backend/lib/plugins/user.js Прегледај датотеку

@@ -2,7 +2,9 @@ const Schwifty = require('@hapipal/schwifty');
2 2
 const Jwt = require('@hapi/jwt');
3 3
 const JwtStrategy = require('../auth/strategies/jwt')
4 4
 const UserModel = require('../models/user');
5
+
5 6
 const UserCurrentRoute = require('../routes/user/current');
7
+const UserLoginRoute = require('../routes/user/login');
6 8
 
7 9
 module.exports = {
8 10
     name: 'user-plugin',
@@ -18,5 +20,6 @@ module.exports = {
18 20
         server.auth.default('default_jwt')
19 21
 
20 22
         await server.route(UserCurrentRoute)
23
+        await server.route(UserLoginRoute)
21 24
     }
22 25
 }

+ 1
- 1
backend/lib/routes/user/current.js Прегледај датотеку

@@ -25,7 +25,7 @@ const validators = {
25 25
 
26 26
 module.exports = {
27 27
     method: 'get',
28
-    path: '/user/{name}',
28
+    path: '/{name}',
29 29
     handler: async request => {
30 30
         try {
31 31
             /** Get the data for your endpoint */

+ 76
- 0
backend/lib/routes/user/login.js Прегледај датотеку

@@ -0,0 +1,76 @@
1
+'use strict';
2
+
3
+const Joi = require('joi');
4
+const User = require('../../models/user');
5
+
6
+const pluginConfig = {
7
+    handlerType: 'user',
8
+    docs: {
9
+        post: {
10
+            description: 'login',
11
+            notes: 'Attempt login'
12
+        }
13
+    }
14
+}
15
+
16
+
17
+/** Validator functions by request method */
18
+const validators = {
19
+    post: {
20
+        payload: Joi.object({
21
+            user: Joi.object().required().keys({
22
+                email: User.field('email').required(),
23
+                password: Joi.string().required()
24
+            })
25
+        })
26
+    }
27
+}
28
+
29
+module.exports = {
30
+    method: 'post',
31
+    path: '/login',
32
+    handler: async (request, h) => {
33
+        try {
34
+            const { user: { email, password } } = request.payload
35
+            // const { userService, displayService } = request.services();
36
+
37
+            // const login = async (txn) => {
38
+
39
+            //     return await userService.login({ email, password }, txn);
40
+            // };
41
+
42
+            // const user = await h.context.transaction(login);
43
+            // const token = userService.createToken(user.id);
44
+
45
+            return {
46
+                ok: true,
47
+                handler: pluginConfig.handlerType,
48
+                data: {
49
+                    user: { email: '', password: '' }
50
+                },
51
+                // data: { user: displayService.user(user, token) }
52
+            }
53
+        }
54
+        catch(err) {
55
+            return {
56
+                ok: false,
57
+                handler: pluginConfig.handlerType,
58
+                data: { error: err },
59
+            }
60
+        }
61
+    },
62
+    options: {
63
+        ...pluginConfig.docs.post,
64
+        tags: ['api'],
65
+        auth: false,
66
+        validate: validators.post,
67
+        response: {
68
+            schema: Joi.object({
69
+                ok: Joi.bool(),
70
+                handler: Joi.string(),
71
+                data: validators.post.payload
72
+            }),
73
+            failAction: 'log'
74
+        }
75
+    }
76
+}

Loading…
Откажи
Сачувај