Home adonisjs 5 - auth
Post
Cancel

adonisjs 5 - auth

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
/**
 * filename: /app/modules/User/routes.ts
 * atau : /start/routes/user.ts
 * import to start routes.ts
 * 
 * import '/app/modules/User/routes.ts'
 * or
 * import './routes/user.ts'
 */

import Route from '@ioc:Adonis/Core/Route'
import User from 'App/Models/User'
import { schema, rules } from '@ioc:Adonis/Core/Validator'

Route.group(() => {
    Route.get('/users', async () => {
        const user = await User.all()
        return { user }
    })

    Route.post('/logout', async ({ auth }) => {
        await auth.use('api').revoke()
        return { Revoke: true }
    })

    Route.post('/login', async ({ auth, request }) => {
        const { username, email, password } = request.only(['username', 'email', 'password'])
        try {
            return await auth
                .use('api')
                .attempt(email || username, password, { expiresIn: '7days' })
        } catch (error) {
            return { error }
        }
    })

    Route.post('/register', async ({ request }) => {
        const userSchema = schema.create({
            username: schema.string({ trim: true }, [
                rules.unique({ table: 'users', column: 'username', caseInsensitive: true })
            ]),
            email: schema.string({ trim: true }, [
                rules.unique({ table: 'users', column: 'email', caseInsensitive: true }),
                rules.email()]),
            password: schema.string({}, [rules.maxLength(8)])
        })

        // validate & save
        try {
            await User.create(await request.validate({ schema: userSchema }))
            return { INFO: 'Register Success...' }
        } catch (error) {
            return { error }
        }
    })
}).prefix('/api')
This post is licensed under CC BY 4.0 by the author.