gm-auth-angular-bundle
TypeScript icon, indicating that this package has built-in type declarations

3.4.0 • Public • Published

Auth

Build

Запустить npm run build для сборки проекта. Результат сборки располагается в каталоге dist/auth.

Publishing

Перед публикацией пакета убедитесь, что вы обладаете правами на публикацию.

Выполните вход в npm-аккаунт через консоль npm login.

Дождитесь сборки пакета. Из консоли в корне выполните cd dist/auth и запустите npm publish.

Сборка и публикация одновременно производится командой npm run publish-onmoon.

Установка пакета в проекте

yarn add gm-auth-angular-bundle

// or

npm install --save gm-auth-angular-bundle

Подключение AuthModule

Модуль AuthModule подключается в корне проекта через метод forRoot(AuthConfig).

При объявлении маршрутов, также доступен из коробки AuthGuard, который выполняет проверки на указанных маршрутах.

Кофигурация модуля имеет сигнатуру

interface AuthConfig {
  host: string;
  cookieSecure?: boolean; // deprecated
  testingMode?: boolean;
  cookie?: {
    secure?: boolean;
    ignoreBaseUrl?: boolean;
  },
  whitelist?: RegExp[]	
}

host – url к апи с развернутым беком аутентификации. Бандл обращается к эндпоинтам (/session/create/ и /session/close/)

cookieSecure (deprecated) – безопасные/небезовасные куки. Обычно сюда отправляется флажок из environment.production.

cookie.secure – безопасные/небезовасные куки. Обычно сюда отправляется флажок из environment.production.

cookie.ignoreBaseUrl – устанавливает куки только по домену, игнорируя baseUrl.

cookie.keyId – имя куки для параметра id в паре ключей авторизации id/token.

cookie.keyToken – имя куки для параметра token в паре ключей авторизации id/token.

testingMode – По умолчанию false. В этом режиме AuthService.isAuthenticated() всегда вернет true

whitelist – По умолчанию []. Список регулярных выражений маршрутов, по которым AuthGuard не делает проверок на аутентификацию.

// app.module.ts

import { NgModule } from '@angular/core';
import { AuthModule } from 'gm-auth-angular-bundle';
import { TranslateModule } from '@ngx-translate/core';
import { AppComponent } from './app.component';
import { AppRoutingModule } from './app-routing.module';
import { environment } from './environments/environment';

@NgModule({
  declarations: [AppComponent],
  imports: [
    TranslateModule.forRoot(),
    AuthModule.forRoot({
        host: 'https://api.gm.money',
        cookie: {
            secure: environment.production
        },
        testingMode: false
      }
    ),
    AppRoutingModule
  ],
  bootstrap: [AppComponent]
})
export class AppModule {
}

Механизм работы

Бандл подключает интерсептор, который слушает все запросы на предмет 401 ошибки.

Если ловится 401, то вычищаются куки браузера, уходит запрос (/session/create/) на создание сессии, и затем пользователя редиректит на панель аутентификации по адресу

<authUrl>?token=<token>&id=<id>&lang=<lang>.

Параметр <lang> получаем из сервиса локализации (из TranslateModule),

<authUrl>, <id> и <token> получены из запроса создания сессии.

В случае успешной аутентификации клиент направляется по адресу

<frontend-domain>/login?token=<token>&id=<id>&lang=<lang>

Этот маршрут создается из пакета при подключении модуля, здесь отрабатывает компонент AuthComponent:

извлекаются параметры из query-строки, устанавливается язык, запоминаются id и token и заполняются куки.

После установки куки клиент направляется по адресу в который стучался до аутентификации.

Заметка. Бандл не обрабатывает 403 статус запросов. 403 статус расценивается как нехватка прав пользователя и должен обрабатываться из приложения. Все аутентификационные траблы должны плевать 401.

Заметка. Имеется подводный камень. Подключайте модуль ДО вашего модуля с маршрутами проекта. В проектах зачастую используют редиректы при объявлении RouterModule. Может сложиться ситуация, при которой достучаться до маршрута <frontend-domain>/login?token=<token>&id=<id>&lang=<lang> не удастся, в итоге фронт попадет петлю редиректов. Если подключать модуль первым, вы исключите подобный кейс.

Редирект на страницу настроек пользователя

Для отправки на страницу настроек пользователь используется метод profile(lang?: string) сервиса AuthService.

Метод ничего не возвращает. Бандл отправляет запрос к API /session/config/ и получачает ссылку и перенаправляет на нее с соотствующими параметрами сессии <profileUrl>?id=<id>&token=<token>&lang=<lang>

Обход интерсептора авторизации

Если необходимо в запросе отключить авторизационные заголовки, используйте токен контекста SKIP_AUTH_TOKEN из пакета, как в примере ниже

    import { SKIP_AUTH_TOKEN } from 'gm-auth-angular-bundle';

    httpClient.get<Response>(`/request`, {
                context: new HttpContext().set(SKIP_AUTH_TOKEN, true),
            }
        );

Readme

Keywords

none

Package Sidebar

Install

npm i gm-auth-angular-bundle

Weekly Downloads

105

Version

3.4.0

License

none

Unpacked Size

217 kB

Total Files

36

Last publish

Collaborators

  • gmmoney