# Schema - Auth
## User
user: {
userId: string, // (unique) user ID
account: string, // (unique) user account
createdAt: Date, // creation time
modifiedAt: Date, // modification time
verifiedAt: Date | null, // verification time
expiredAt: Date | null, // expiration time to prevent malicious attack
disabledAt: Date | null, // mark this account disabled
roles: object, // roles with booleans
password: string, // hashed password
salt: string, // salt for password hash
name: string, // display name
info: object // other information such as address, telephone number, ...
}
## Client
client: {
id: string, // (unique) client ID
createdAt: Date, // creation time
modifiedAt: Date, // modification time
clientSecret: string | null, // client secret
redirectUris: string[], // allowed redirect URIs
scopes: string[], // allowed scopes.
userId: string, // developer's user ID corresponding to the `user` collection
name: string, // client name
imageUrl: string | null // image URL
}
## Login Session
loginSession: {
sessionId: string, // (unique) session ID
expiresAt: Date, // expiration date time
userId: string // associated user ID corresponding to `users` collection
}
## Authorization Code
authorizationCode: {
code: string, // (unique) authorization code
expiresAt: Date, // expiration date time
redirectUri: string, // allowed redirect URIs
scope: string | null, // authorized scope(s)
clientId: string, // client ID corresponding to `client` collection
userId: string // associated user ID corresponding to `users` collection
}
## Access Token
accessToken: {
accessToken: string, // (unique) access token
refreshToken: string, // (unique) refresh token corresponding to `refreshToken` collection
expiresAt: Date, // expiration time
scope: string | null, // authorized scope(s)
redirectUri: string, // the redirect URI
clientId: string, // client ID corresponding to `client` collection
userId: string // associated user ID corresponding to `users` collection
}
## Refresh Token
refreshToken: {
refreshToken: string, // (unique) refresh token
expiresAt: Date, // expiration time
scope: string | null, // authorized scope(s)
redirectUri: string, // the redirect URI
clientId: string, // client ID corresponding to `client` collection
userId: string // associated user ID corresponding to `users` collection
}