Просмотр исходного кода

:sparkles: fleshing out login responses

master
TOJ 5 лет назад
Родитель
Сommit
f7456836bb

+ 6
- 6
backend/lib/index.js Просмотреть файл

1
-const Jwt = require('@hapi/jwt');
2
-const AuthStratgey = require('./auth/strategies/jwt')
3
 const UserPlugin = require('./plugins/user');
1
 const UserPlugin = require('./plugins/user');
4
 const TestPlugin = require('./plugins/test');
2
 const TestPlugin = require('./plugins/test');
5
 
3
 
7
     name: 'main-app-plugin',
5
     name: 'main-app-plugin',
8
     register: async (server, options) => {
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
     static get joiSchema() {
6
     static get joiSchema() {
7
         return Joi.object({
7
         return Joi.object({
8
             id: Joi.number().required(),
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
 const Jwt = require('@hapi/jwt');
2
 const Jwt = require('@hapi/jwt');
3
 const JwtStrategy = require('../auth/strategies/jwt')
3
 const JwtStrategy = require('../auth/strategies/jwt')
4
 const UserModel = require('../models/user');
4
 const UserModel = require('../models/user');
5
+
5
 const UserCurrentRoute = require('../routes/user/current');
6
 const UserCurrentRoute = require('../routes/user/current');
7
+const UserLoginRoute = require('../routes/user/login');
6
 
8
 
7
 module.exports = {
9
 module.exports = {
8
     name: 'user-plugin',
10
     name: 'user-plugin',
18
         server.auth.default('default_jwt')
20
         server.auth.default('default_jwt')
19
 
21
 
20
         await server.route(UserCurrentRoute)
22
         await server.route(UserCurrentRoute)
23
+        await server.route(UserLoginRoute)
21
     }
24
     }
22
 }
25
 }

+ 1
- 1
backend/lib/routes/user/current.js Просмотреть файл

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

+ 76
- 0
backend/lib/routes/user/login.js Просмотреть файл

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
+}

Загрузка…
Отмена
Сохранить