06 Авторизация и Сессии
Sessions
Сессии в morphcluster опциональны, но без них FastifyRest сможет принимать только анонимные запросы. Сервис Sessions использует PostgreSQL.
Вначале, добавьте npm пакет:
npm install ./corelibs/sessions
Инициализация сервиса:
import {Sessions,Auth} from '@morphcluster/sessions'
...
//Добавление Sessions к хосту
host.addService(new Sessions( host, {
"pg": {
//uri для подключения postgresql
"uri": "postgresql://postgres:123@127.0.0.1:5432/carabi",
//schema из postgresql
"schema": "logger",
//timezone pg клиента
"timezone": "Europe/Moscow"
}
} ))
//Базовый сервис авторизации
//Авторизирует, как администратора в любом workspace
host.addService(new Auth( host, {
//Логин и пароль администратора
"admin": {
"login" : "admin",
"password" : "123"
}
} ))
Написание авторизации
Чтобы создать свою авторизацию создайте новый сервис:
import {Sessions} from "@morphcluster/sessions"
import {ComplexError, ServiceRequire} from "@morphcluster/core"
export default class MyAuth extends ServiceRequire {
constructor (host) {
super(host)
/** @type {Sessions} */
this.Sessions = null
this.requirements = ["Sessions"]
this.addRequest({
name : 'password',
description: 'Авторизация',
request: { ... },
anonymous: true,
"http":"POST"
})
}
async password(req, workspace, log) {
//Напишите валидацию и получение данных
...
let createInfo = {
//UserId
userId: 1,
//Логин
login: "user",
//Является ли администратором
isAdmin: false
}
let token = await this.Sessions.create(createInfo, workspace)
//Создание сессии вернет токен сессии
return token
}
Передача сессии в запросе
Если пользователь авторизирован, FastifyRest вместе с входными параметрами передаст объект session, передайте этот параметр в запросы, которые будете вызывать, если хотите чтобы сохранилось привязка к пользователю.
async hello(request, workspace, log) {
if (request.session) console.log("Hello "+request.session.login)
else console.log("Hello anonymous")
//Передача сессии при вызове другого сервиса
await this.Test2.DoSomething({ session: request.session }, workspace, log )
}
Постоянная сессия
Постоянная сессия не будет автоматически очищатся и может быть использована, как API ключ или в сценарии, когда авторизация постоянна.
Отмемтить сессию в постоянную можно запросом Session.setPermanent. В админ панели эта возможность есть в разделе "Сессии" (кнопка ключа, справа от сессии)
No Comments