🔧 Configure addons
This commit is contained in:
parent
9b616ce4e3
commit
e4a802d5f2
12 changed files with 87 additions and 49 deletions
|
|
@ -1,26 +1,27 @@
|
|||
import { DateTime } from 'luxon'
|
||||
import hash from '@adonisjs/core/services/hash'
|
||||
import { compose } from '@adonisjs/core/helpers'
|
||||
import { BaseModel, column } from '@adonisjs/lucid/orm'
|
||||
import { withAuthFinder } from '@adonisjs/auth/mixins/lucid'
|
||||
import { DbRememberMeTokensProvider } from '@adonisjs/auth/session'
|
||||
|
||||
const AuthFinder = withAuthFinder(() => hash.use('scrypt'), {
|
||||
uids: ['email'],
|
||||
passwordColumnName: 'password',
|
||||
})
|
||||
export default class User extends BaseModel {
|
||||
static rememberMeTokens = DbRememberMeTokensProvider.forModel(User)
|
||||
|
||||
export default class User extends compose(BaseModel, AuthFinder) {
|
||||
@column({ isPrimary: true })
|
||||
declare id: number
|
||||
|
||||
@column({ serializeAs: 'class', serialize: serializeClass })
|
||||
declare classId: number
|
||||
|
||||
@column()
|
||||
declare fullName: string | null
|
||||
declare firstName: string
|
||||
|
||||
@column()
|
||||
declare lastName: string
|
||||
|
||||
@column()
|
||||
declare email: string
|
||||
|
||||
@column({ serializeAs: null })
|
||||
declare password: string
|
||||
@column()
|
||||
declare avatar: string
|
||||
|
||||
@column.dateTime({ autoCreate: true })
|
||||
declare createdAt: DateTime
|
||||
|
|
@ -28,3 +29,8 @@ export default class User extends compose(BaseModel, AuthFinder) {
|
|||
@column.dateTime({ autoCreate: true, autoUpdate: true })
|
||||
declare updatedAt: DateTime | null
|
||||
}
|
||||
|
||||
// TODO
|
||||
function serializeClass(classId: number): string {
|
||||
return 'class_' + classId
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,7 +6,8 @@ const authConfig = defineConfig({
|
|||
default: 'web',
|
||||
guards: {
|
||||
web: sessionGuard({
|
||||
useRememberMeTokens: false,
|
||||
useRememberMeTokens: true,
|
||||
rememberMeTokensAge: '2 years',
|
||||
provider: sessionUserProvider({
|
||||
model: () => import('#models/user')
|
||||
}),
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
import env from '#start/env'
|
||||
import { defineConfig, store, drivers } from '@adonisjs/cache'
|
||||
|
||||
const cacheConfig = defineConfig({
|
||||
|
|
@ -9,12 +8,17 @@ const cacheConfig = defineConfig({
|
|||
|
||||
default: store()
|
||||
.useL1Layer(drivers.memory())
|
||||
|
||||
.useL2Layer(drivers.redis({
|
||||
connectionName: 'main',
|
||||
}))
|
||||
|
||||
}
|
||||
.useL2Layer(
|
||||
drivers.redis({
|
||||
connectionName: 'main',
|
||||
})
|
||||
)
|
||||
.useBus(
|
||||
drivers.redisBus({
|
||||
connectionName: 'main',
|
||||
})
|
||||
),
|
||||
},
|
||||
})
|
||||
|
||||
export default cacheConfig
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ import { defineConfig } from '@adonisjs/cors'
|
|||
*/
|
||||
const corsConfig = defineConfig({
|
||||
enabled: true,
|
||||
// TODO: Only same domain
|
||||
origin: true,
|
||||
methods: ['GET', 'HEAD', 'POST', 'PUT', 'DELETE'],
|
||||
headers: true,
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ const driveConfig = defineConfig({
|
|||
location: app.makePath('storage'),
|
||||
serveFiles: true,
|
||||
routeBasePath: '/uploads',
|
||||
visibility: 'public',
|
||||
visibility: 'private'
|
||||
}),
|
||||
},
|
||||
})
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ import { defineConfig, stores } from '@adonisjs/limiter'
|
|||
const limiterConfig = defineConfig({
|
||||
default: env.get('LIMITER_STORE'),
|
||||
stores: {
|
||||
|
||||
/**
|
||||
* Redis store to save rate limiting data inside a
|
||||
* redis database.
|
||||
|
|
@ -14,12 +13,11 @@ const limiterConfig = defineConfig({
|
|||
*/
|
||||
redis: stores.redis({}),
|
||||
|
||||
|
||||
/**
|
||||
* Memory store could be used during
|
||||
* testing
|
||||
*/
|
||||
memory: stores.memory({})
|
||||
memory: stores.memory({}),
|
||||
},
|
||||
})
|
||||
|
||||
|
|
|
|||
|
|
@ -4,18 +4,17 @@ import { defineConfig, transports } from '@adonisjs/mail'
|
|||
const mailConfig = defineConfig({
|
||||
default: 'mailgun',
|
||||
|
||||
/**
|
||||
* The mailers object can be used to configure multiple mailers
|
||||
* each using a different transport or same transport with different
|
||||
* options.
|
||||
/**
|
||||
* The mailers object can be used to configure multiple mailers
|
||||
* each using a different transport or same transport with different
|
||||
* options.
|
||||
*/
|
||||
mailers: {
|
||||
mailgun: transports.mailgun({
|
||||
key: env.get('MAILGUN_API_KEY'),
|
||||
key: env.get('MAILGUN_API_KEY')!,
|
||||
baseUrl: 'https://api.mailgun.net/v3',
|
||||
domain: env.get('MAILGUN_DOMAIN'),
|
||||
domain: env.get('MAILGUN_DOMAIN')!,
|
||||
}),
|
||||
|
||||
},
|
||||
})
|
||||
|
||||
|
|
|
|||
|
|
@ -6,10 +6,10 @@ export default class extends BaseSchema {
|
|||
async up() {
|
||||
this.schema.createTable(this.tableName, (table) => {
|
||||
table.increments('id').notNullable()
|
||||
table.string('full_name').nullable()
|
||||
table.integer('class_id').notNullable()
|
||||
table.string('first_name', 80).notNullable()
|
||||
table.string('last_name', 80).notNullable()
|
||||
table.string('email', 254).notNullable().unique()
|
||||
table.string('password').notNullable()
|
||||
|
||||
table.timestamp('created_at').notNullable()
|
||||
table.timestamp('updated_at').nullable()
|
||||
})
|
||||
|
|
|
|||
|
|
@ -0,0 +1,26 @@
|
|||
import { BaseSchema } from '@adonisjs/lucid/schema'
|
||||
|
||||
export default class extends BaseSchema {
|
||||
protected tableName = 'remember_me_tokens'
|
||||
|
||||
async up() {
|
||||
this.schema.createTable(this.tableName, (table) => {
|
||||
table.increments()
|
||||
table
|
||||
.integer('tokenable_id')
|
||||
.notNullable()
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('users')
|
||||
.onDelete('CASCADE')
|
||||
table.string('hash').notNullable().unique()
|
||||
table.timestamp('created_at').notNullable()
|
||||
table.timestamp('updated_at').notNullable()
|
||||
table.timestamp('expires_at').notNullable()
|
||||
})
|
||||
}
|
||||
|
||||
async down() {
|
||||
this.schema.dropTable(this.tableName)
|
||||
}
|
||||
}
|
||||
11
start/env.ts
11
start/env.ts
|
|
@ -48,12 +48,15 @@ export default await Env.create(new URL('../', import.meta.url), {
|
|||
| Variables for configuring the mail package
|
||||
|----------------------------------------------------------
|
||||
*/
|
||||
SMTP_HOST: Env.schema.string(),
|
||||
SMTP_PORT: Env.schema.string(),
|
||||
// MAILGUN_API_KEY: Env.schema.string(),
|
||||
// MAILGUN_DOMAIN: Env.schema.string()
|
||||
|
||||
/*
|
||||
|----------------------------------------------------------
|
||||
| Variables for configuring the redis package
|
||||
|----------------------------------------------------------
|
||||
*/
|
||||
REDIS_HOST: Env.schema.string({ format: 'host' }),
|
||||
REDIS_PORT: Env.schema.number(),
|
||||
REDIS_PASSWORD: Env.schema.string.optional(),
|
||||
MAILGUN_API_KEY: Env.schema.string(),
|
||||
MAILGUN_DOMAIN: Env.schema.string()
|
||||
})
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue