Implementation of repositories required by Authentication Library.
npm install @thermopylae/core.authentication
Although farmhash, a dependency used by this package, has prebuilt binaries it would be recommended to rebuild them.
npm rebuild --build-from-source farmhash
Before being able to use this package you need to take following actions:
Deploy Redis 6 and MySQL 8 server instances
Create MySQL database having the following minimal schema:
Configure core logging. Example:
import { DefaultFormatters, LoggerManagerInstance, OutputFormat } from '@thermopylae/core.logger';
import { ClientModule } from '@thermopylae/core.declarations';
LoggerManagerInstance.formatting.setDefaultFormattingOrder(OutputFormat.PRINTF, {
colorize: true,
skippedFormatters: new Set([DefaultFormatters.TIMESTAMP]),
levelForLabel: {
[ClientModule.MYSQL]: 'info',
[ClientModule.REDIS]: 'info'
}
});
LoggerManagerInstance.console.createTransport({ level: 'info' });
import { initLogger as initMySqlLogger } from '@thermopylae/core.mysql';
import { initLogger as initRedisClientLogger } from '@thermopylae/core.redis';
initMySqlLogger();
initRedisClientLogger();
import { MySqlClientInstance } from '@thermopylae/core.mysql';
import { ConnectionType, DebuggableEventType, RedisClientInstance } from '@thermopylae/core.redis';
MySqlClientInstance.init({
pool: {
host: '127.0.0.1',
port: 3306,
user: 'your-user',
password: 'your-password',
database: 'your-database'
}
});
await RedisClientInstance.connect({
[ConnectionType.REGULAR]: {
host: '127.0.0.1',
port: 3306,
password: 'your-password',
connect_timeout: 10_000,
max_attempts: 10,
retry_max_delay: 5_000,
attachDebugListeners: new Set<DebuggableEventType>(['end', 'reconnecting'])
}
});
This package contains implementations of the repositories required by @thermopylae/lib.authentication. You can create instances of these repositories and pass them as config to @thermopylae/lib.authentication.
Repositories are grouped in two categories:
Bellow is an example of how the repositories implementations from this package can be used in order to instantiate AuthenticationEngine. @FIXME LINK
import { AccountWithTotpSecret, AuthenticationEngine } from '@thermopylae/lib.authentication';
import {
AccountMySqlRepository,
FailedAuthenticationsMysqlRepository,
SuccessfulAuthenticationsMysqlRepository,
ActivateAccountSessionRedisRepository,
AuthenticationSessionRedisRepository,
FailedAuthenticationAttemptsSessionRedisRepository,
ForgotPasswordSessionRedisRepository
} from '@thermopylae/core.authentication';
// setup decribed above in `Prerequisites` chapter
const AUTHENTICATION_ENGINE = new AuthenticationEngine<AccountWithTotpSecret>({
// config params...
repositories: {
account: new AccountMySqlRepository(),
successfulAuthentications: new SuccessfulAuthenticationsMysqlRepository(),
failedAuthenticationAttempts: new FailedAuthenticationsMysqlRepository(),
authenticationSession: new AuthenticationSessionRedisRepository('actv-acc'),
failedAuthAttemptSession: new FailedAuthenticationAttemptsSessionRedisRepository('fail-auth'),
forgotPasswordSession: new ForgotPasswordSessionRedisRepository('fgt-pwd'),
activateAccountSession: new ActivateAccountSessionRedisRepository('actv-acc')
}
});
// use authentication engine
AUTHENTICATION_ENGINE.enableAccount('acount-id');
API documentation is available here.
It can also be generated by issuing the following commands:
git clone git@github.com:marinrusu1997/thermopylae.git
cd thermopylae
yarn install
yarn workspace @thermopylae/core.authentication run doc
👤 Rusu Marin
Copyright © 2021 Rusu Marin.
This project is MIT licensed.