@schitzophrenic/auth-lib
v1.0.2
Published
This library provides a standardised approach to simple username + password authentication.
Readme
AuthLib
This library provides a standardised approach to simple username + password authentication.
Dependency
To use this service there needs to be an authorization backend with the following endpoints:
- (POST) {baseURL}/login ({username: string, password: string } -> Principal)
- (GET) {baseURL}/logout -> void
- (GET) {baseURL}/currentUser -> Principal
The Principal Responses shall fulfill this interface:
interface Principal {
username: string, // Alias of the user
fullName: string, // Full name of the user
email: string, // Email Address of the user
appName: string, // Name of your application
authorities: Roles // List containing roles
}Notice: As roles the following values are supported:
ADMIN, USER, TECHNICAL
Usage
To use the authentication, just add the feature "withPrincipal()" to you ngrx signal store.
This will add a check if a user is logged in to the onInit of your app on open a login dialog if the user is not logged in. This store also provides methods for handling login, logout and getting a current user.
Example
export const AppStore = signalStore(
{providedIn: "root"},
withPrincipal(),
...
);In some other component or service, you can now read the principal as follows:
@Injectable({...})
export class MyService {
private store = inject(AppStore);
private myUser = this.store.principal();
...
public logOut(): void {
this.store.logout();
}
// Use this only if you do not want to use the provided login mask.
public logIn(username: string, password: string): Observable<boolean> {
return this.store.login(username, password);
}
}Configuration
There are three different configuration points for this library:
- You may call withPrincipal(false), if you no not wish to use the provided login dialog.
- You may use the provided authorizationInterceptor to configure your http client to forget the principal and try to open the login dialog if you use it.
- You may provide custom AuthorizationConfig as shown in the example below, to change that base url of your login service, add a frontend link to an endpoint where users may change their password and a backdropCssClass for the backdrop of the login dialog.
{
provide: AuthenticationConfig,
useValue: {
baseUrl: 'http://localhost:8081/auth',
resetPasswordLink: '/resetPassword',
backdropCssClass: 'solid'
}
}Deactivation of Routes
If you do not want to have your store to load the current user, we provide a canActivate function principalDeactivatedGuard that can be added to routes to prevent them from calling the currentUser endpoint.
