Список изменений с версии v0.8.x до версии v0.15.x
Обновлён интерфейс администратора (Admin UI) для использования последней версии JS SDK, чтобы разрешить конфликт поля записи isNew
(#2385).
Исправлен z-index
полноэкранного поля editor
(#2410).
Вставляет настройки приложения по умолчанию как часть миграции системы init, чтобы они всегда были доступны при доступе из пользовательской миграции (#2423).
Исправлено разрешение идентификаторов в запросе вида SELECT DISTINCT
(#2349-5706019).
Исправлено неправильное разрешение схемы коллекции вида в нескольких полях с псевдонимами, происходящих из одного источника поля (#2349-5707675).
Добавлена резервная информация о перенаправлении OAuth2, чтобы уведомить пользователя о необходимости вернуться в приложение, если окно браузера не закрывается автоматически.
Запускает связанные события подписки в реальном времени модели Record
при сохранении структуры модели (#2325).
Исправлена ошибка, когда сочетание клавиш Ctrl + S
в поле editor
не распространяло ярлык быстрого сохранения на родительскую форму.
Добавлено сочетание клавиш ⌘ + S
для ярлыка быстрого сохранения записи (у меня нет устройства Mac для тестирования, но оно должно работать на основе документации e.metaKey
).
Включён RTL для редактора TinyMCE (#2327).
Уменьшены сдвиги вертикального макета формы записи и немного улучшена скорость рендеринга при загрузке нескольких полей relation
.
Активирован кэш ресурсов интерфейса администратора.
Упрощён поток аутентификации OAuth2 в одном вызове «всё в одном» (#55). Требуется JS SDK версии 0.14.0+ или Dart SDK версии 0.9.0+. Старый метод обмена кодом и токеном всё ещё поддерживается, но метод SDK переименован в authWithOAuth2Code()
(чтобы минимизировать критические изменения, в JS SDK есть функция перегрузки, которая будет проксировать существующие вызовы authWithOauth2
на authWithOAuth2Code
). Для получения дополнительной информации и примера вы можете проверить https://pocketbase.io/docs/authentication/#oauth2-integration.
Поддерживаются защищённые файлы (#215). Требуется JS SDK версии 0.14.0+ или Dart SDK версии 0.9.0+. Работает с недолговечным (~5 минут) токеном файла, переданным как параметр запроса с URL файла. Для получения дополнительной информации и примеров вы можете проверить https://pocketbase.io/docs/files-handling/#protected-files.
⚠️ Исправлена опечатка в Record.WithUnkownData()
-> Record.WithUnknownData()
.
Добавлена поддержка простого поиска по шаблону в интерфейсе администратора.
Добавлен авторежим «черновик», позволяющий восстановить предыдущее состояние записи в случае случайного обновления или сбоя питания.
Добавлено сочетание клавиш Ctrl + S
, позволяющее сохранить изменения в записи без закрытия панели.
Добавлена поддержка «перетаскивания файлов» для поля загрузки файлов.
Обновился интерфейс администратора OAuth2.
Проверяется наличие нулевых хуков в forms.RecordUpsert
, когда используется с пользовательским Dao
(#2277).
Исправлена проблема, из-за которой подробное сообщение об ошибке уникальности не возвращалось при сбое создания записи (#2287).
list.ExistInSliceWithRegex()
(#2272).Исправлены проблемы с визуализацией метаданных в Firefox в интерфейсе администратора Logs (#2221).
Выполнено понижение до версии 1 пакета aws/aws-sdk-go
, поскольку версия 2 имеет проблемы совместимости с GCS (#2231).
Обновлено... GitHub action to use min Go 1.20.3 для предкомпилированного исполняемого файла, поскольку он содержит некоторые незначительные исправления безопасности в net/http.
IsNewRecord bool, // логическое поле, указывающее, создал ли действие OAuth2 новую запись авторизации
ProviderName string, // имя провайдера OAuth2 (например, "google")
ProviderClient auth.Provider, // загруженный клиент провайдера
file
в качестве отношения «Отображаемые поля» (#1989).HEAD
для маршрута /api/files/:collection/:recordId/:filename
(#1976).Введён новый тип коллекции «Просмотр», позволяющий создавать коллекцию только для чтения на основе пользовательского SQL-запроса SELECT
. Он поддерживает:
COUNT()
, MIN()
, MAX()
, GROUP BY
и т. д.);Добавлено автоматическое повторение с отказом (по умолчанию 8 попыток) для запросов SELECT
, чтобы корректно обрабатывать ошибки типа «база данных заблокирована» (#1795). Максимальное количество попыток можно получить или изменить через Dao.MaxLockRetries
.
Установлен максимальный тайм-аут выполнения запроса по умолчанию (30 с). Тайм-аут по умолчанию можно получить или изменить с помощью Dao.ModelQueryTimeout
. Для готовых исполняемых файлов его также можно изменить с помощью флага --queryTimeout=10
.
Поддержка dao.RecordQuery(collection)
для прямого сканирования результатов One()
и All()
в *models.Record
или []*models.Record
, без необходимости явного использования NullStringMap
.
Возможность перезаписать стандартные заголовки ответа сервера, если установлен явный заголовок ответа.
Добавление эскизов к файлам при визуализации полей отображения файлов.
Опция «Минимальный выбор» для поля отношения.
Доступ к os.Environ()
через process.env
в JS-миграциях.
Поле UploadedFiles
добавлено в структуры событий RecordCreateEvent
и RecordUpdateEvent
.
⚠️ Файлы загружаются после сохранения записи, что позволяет безопасно устанавливать уникальный идентификатор записи из хука OnModelBeforeCreate
.
⚠️ Функция System.GetFile()
теперь возвращает непосредственно *blob.Reader
, а не интерфейс io.ReadCloser
.
⚠️ Поля To
, Cc
и Bcc
в mailer.Message
изменены на []mail.Address
для единообразия и возможности использовать несколько получателей и необязательное имя.
Если вы отправляете собственные электронные письма, вам придётся заменить:
message := &mailer.Message{
...
// (старое) To: mail.Address{Address: "to@example.com"}
To: []mail.Address{{Address: "to@example.com", Name: "Some optional name"}},
// (старое) Cc: []string{"cc@example.com"}
Cc: []mail.Address{{Address: "cc@example.com", Name: "Some optional name"}},
// (старое) Bcc: []string{"bcc@example.com"}
Bcc: []mail.Address{{Address: "bcc@example.com", Name: "Some optional name"}},
...
}
⚠️ Интеграция Authentik переработана в более общий провайдер «OpenID Connect» (oidc
), который поддерживает любые OIDC-провайдеры (Okta, Keycloak и др.). Если вы ранее использовали Authentik, убедитесь, что ключ провайдера в вашем коде переименован в oidc
. Чтобы включить более одного провайдера OIDC, можно использовать дополнительные ключи провайдеров oidc2
и oidc3
.
⚠️ Убраны ранее устаревшие помощники Dao.Block()
и Dao.Continue()
в пользу Dao.NonconcurrentDB()
.
Улучшения в административном интерфейсе.
Исправлено отсутствие реакции «Переключить столбец» при переходе между коллекциями (#1836).
Регистрация текущего времени и даты при запуске сервера (#1822).
Устранена проблема с кнопкой «Очистить» в компоненте выбора даты, которая не очищала значение (#1730).
Небольшое увеличение контрастности полей (#1742).
Автоматическое закрытие выпадающего списка множественного выбора при достижении максимального количества элементов.
Исправлена проблема, из-за которой класс CSS overlay-active
не удалялся при закрытии вложенной панели наложения (#1718).
Добавлено название коллекции на странице (#1711).
Рефакторинг интерфейса выбора отношений для обеспечения серверного поиска, сортировки, создания, обновления и удаления записей отношений (#976).
Добавлена новая опция RelationOptions.DisplayFields
, позволяющая указать пользовательскую визуализацию полей отношений в интерфейсе администратора.
Добавлен провайдер Authentik OAuth2 (#1377; спасибо @pr0ton11).
Добавлен провайдер LiveChat OAuth2 (#1573; спасибо @mariosant).
Добавлен провайдер Gitea OAuth2 (#1643; спасибо @hlanderdev).
Добавлены превью файлов PDF (#1548; спасибо @mjadobson).
Добавлены превью видео- и аудиофайлов.
Добавлено поле editor
для HTML-контента на основе TinyMCE (#370). На данный момент новое поле не имеет никаких параметров конфигурации или валидаций, но это может измениться в будущем в зависимости от того, как разработчики будут его использовать.
Добавлены опции «Дублировать» для коллекций и записей в интерфейсе администратора (#1656).
Добавлен помощник filesystem.GetFile()
для чтения файлов через абстракцию FileSystem (#1578; спасибо @avarabyeu).
Добавлены новые хуки событий аутентификации для более точного контроля и обработки более сложных сценариев аутентификации:
// auth record
OnRecordBeforeAuthWithPasswordRequest()
OnRecordAfterAuthWithPasswordRequest()
OnRecordBeforeAuthWithOAuth2Request()
OnRecordAfterAuthWithOAuth2Request()
OnRecordBeforeAuthRefreshRequest()
OnRecordAfterAuthRefreshRequest()
// admin
OnAdminBeforeAuthWithPasswordRequest()
OnAdminAfterAuthWithPasswordRequest()
OnAdminBeforeAuthRefreshRequest()
OnAdminAfterAuthRefreshRequest()
OnAdminBeforeRequestPasswordResetRequest()
OnAdminAfterRequestPasswordResetRequest()
OnAdminBeforeConfirmPasswordResetRequest()
OnAdminAfterConfirmPasswordResetRequest()
Добавлена вспомогательная функция models.Record.CleanCopy()
, создающая новую копию записи с последним состоянием данных существующей записи и всеми остальными параметрами, сброшенными до значений по умолчанию.
Добавлена новая вспомогательная функция apis.RecordAuthResponse(app, httpContext, record, meta)
, возвращающая стандартный ответ API аутентификации записи (#1623).
Проведён рефакторинг операций расширения и изменения данных модели Record
для обеспечения безопасности параллельного выполнения.
Все перехватчики отправки форм forms
были изменены для использования универсального типа данных в качестве полезной нагрузки.
Добавились несколько помощников store.Store
:
store.Reset(newData map[string]T)
store.Length() int
store.GetAll() map[string]T
Поддержка тегов для всех связанных с записями и моделями событийных хуков.
Теги позволяют регистрировать обработчики событий, которые будут вызываться только для совпадающих имён таблиц или идентификаторов/имён коллекций. Например:
app.OnRecordBeforeCreateRequest("articles").Add(func(e *core.RecordCreateEvent) error {
// вызывается только при создании записи "articles"
log.Println(e.Record)
return nil
})
Для всех этих событийных хуков *hook.Hook
был заменён на *hooks.TaggedHook
, но сигнатуры методов хука остались прежними, поэтому он должен вести себя так же, как и раньше, если теги не были указаны.
⚠️ Исправлена нормализация значения поля string json
(#1703).
Чтобы обеспечить бесшовную поддержку запросов application/json
и multipart/form-data
, применяются следующие правила нормализации, если поле json
является простой строковой величиной:
true
is converted to the json false
- "null" is converted to the json null
- "[1,2,3]" is converted to the json [1,2,3]
- "{"a":1,"b":2}" is converted to the json {"a":1,"b":2}
- numeric strings are converted to json number
- double quoted strings are left as they are (aka. without normalizations)
- any other string (empty string too) is double quoted
Additionally, the "Nonempty" `json` field constraint now checks for `null`, `[]`, `{}` and `""` (empty string).
Added aria-label
to some of the buttons in the Admin UI for better accessibility (#1702; thanks @ndarilek).
Updated the filename extension checks in the Admin UI to be case-insensitive (#1707; thanks @hungcrush).
Перевод текста на русский язык:
Преобразуется в JSON как false
:
— «null» преобразуется в JSON null
;
— «[1, 2, 3]» преобразуется в JSON [1, 2, 3]
;
— "{"a":1,"b":2}"
преобразуется в JSON {«a»:1,«b»:2}
;
— числовые строки преобразуются в число JSON;
— строки в двойных кавычках остаются без изменений (т. е. без нормализации);
— любая другая строка (включая пустую строку) заключается в двойные кавычки.
Кроме того, ограничение поля «Непустое» json
теперь проверяет наличие null
, []
, {}
и ""
(пустая строка).
— Добавлен атрибут aria-label
к некоторым кнопкам в административном интерфейсе для улучшения доступности (#1702, спасибо @ndarilek).
— Обновлены проверки расширений имён файлов в административном пользовательском интерфейсе, чтобы они были нечувствительны к регистру (#1707, спасибо @hungcrush). В запросе представлен текст, связанный с разработкой и обновлением программного обеспечения PocketBase. Текст содержит информацию о новых функциях, исправлениях ошибок и других изменениях в разных версиях программы.
В запросе присутствуют фрагменты кода, которые связаны с языком программирования Go. Однако в запросе нет технических терминов или специфических понятий, требующих перевода. Поэтому перевод текста не требуется. Изменения в версии pocketbase 0.9.2:
— Исправлена проблема конфликта имён столбцов при удалении записей ([#1220]).
Изменения в версии pocketbase 0.9.1:
— Перемещение операций загрузки и удаления файлов из транзакций базы данных для минимизации времени блокировки.
— Добавление семафора запросов Dao и базовой обработки ошибок и повторных попыток для повышения пропускной способности одновременной записи ([#1187]).
— Исправление проблемы каскадного удаления записей при наличии ссылок типа «A<->B».
— Замена c.QueryString() на c.QueryParams().Encode() для обеспечения возможности загрузки изменённых параметров запроса промежуточным программным обеспечением в действиях crud по умолчанию ([#1210]).
— Устранение проблемы, когда поле datetime не вызывало событие onChange при ручном редактировании поля, а также добавление кнопки «Очистить» ([#1219]).
— Обновление действия GitHub goreleaser для использования go 1.19.4, поскольку эта версия содержит некоторые исправления безопасности.
Изменения в версии pocketbase 0.9.0:
— Решение проблемы параллельного обновления и удаления нескольких связей ([#1138]).
— Включение необработанных данных пользователя OAuth2 (meta.rawUser) и токена доступа OAuth2 (meta.accessToken) в ответ аутентификации ([#654]).
— Метод BaseModel.UnmarkAsNew() был переименован в MarkAsNotNew(). Кроме того, чтобы упростить запросы вставки модели с пользовательскими идентификаторами, больше не требуется вызывать MarkAsNew() для моделей с установленным ID, которые были инициализированы вручную, так как теперь это состояние по умолчанию. Когда модель заполняется значениями из базы данных (например, после сканирования строки), она автоматически помечается как «не новая».
— Добавлен метод Record.OriginalCopy(), который возвращает новую копию Record, заполненную исходными данными загруженной записи (полезно, если вы хотите сравнить старые и новые значения полей).
— Добавлены новые обработчики событий: app.OnBeforeBootstrap(), app.OnAfterBootstrap(), app.OnBeforeApiError(), app.OnAfterApiError(), app.OnRealtimeDisconnectRequest(), app.OnRealtimeBeforeMessageSend(), app.OnRealtimeAfterMessageSend(), app.OnRecordBeforeRequestPasswordResetRequest(), app.OnRecordAfterRequestPasswordResetRequest(), app.OnRecordBeforeConfirmPasswordResetRequest(), app.OnRecordAfterConfirmPasswordResetRequest(), app.OnRecordBeforeRequestVerificationRequest(), app.OnRecordAfterRequestVerificationRequest() и app.OnRecordBeforeConfirmVerificationRequest(). app.OnRecordAfterConfirmVerificationRequest()
app.OnRecordBeforeRequestEmailChangeRequest()
app.OnRecordAfterRequestEmailChangeRequest()
app.OnRecordBeforeConfirmEmailChangeRequest()
app.OnRecordAfterConfirmEmailChangeRequest()
—
В файле хранится оригинальное имя файла как метаданные под ключом original_filename
. Доступ к нему можно получить следующим образом:
fs, _ := app.NewFilesystem()
defer fs.Close()
attrs, _ := fs.Attributes(fikeKey)
attrs.Metadata["original_name"]
—
Добавлена поддержка запросов файлов Partial/Range
(#1125). Это незначительное изменение, если вы используете filesystem.Serve
(например, в качестве части пользовательского хука OnFileDownloadRequest
):
// old
filesystem.Serve(res, e.ServedPath, e.ServedName)
// new
filesystem.Serve(res, req, e.ServedPath, e.ServedName)
—
Команда migrate
была переработана для поддержки внешних файлов миграции JavaScript с использованием встроенного интерпретатора JS (goja
). Это позволяет создавать собственные сценарии миграции, такие как программное создание коллекций, инициализация настроек по умолчанию, выполнение импорта данных и т. д., с помощью JavaScript API, очень похожего на Go (скоро появится дополнительная документация).
Команда migrate
доступна по умолчанию для предварительно созданного исполняемого файла, но если вы используете PocketBase в качестве фреймворка, вам необходимо зарегистрировать её вручную:
migrationsDir := "" // default to "pb_migrations" (for js) and "migrations" (for go)
// load js files if you want to allow loading external JavaScript migrations
jsvm.MustRegisterMigrations(app, &jsvm.MigrationsOptions{
Dir: migrationsDir,
})
// register the `migrate` command
migratecmd.MustRegister(app, app.RootCmd, &migratecmd.Options{
TemplateLang: migratecmd.TemplateLangJS, // or migratecmd.TemplateLangGo (default)
Dir: migrationsDir,
Automigrate: true,
})
Переработка также включает поддержку автоматических миграций.
Если Automigrate
включено (по умолчанию true
для предварительно созданного исполняемого файла; может быть отключено с помощью --automigrate=0
), PocketBase будет автоматически генерировать файлы миграции JS (или Go) в фоновом режиме с изменениями вашей коллекции. Каталог с миграциями JS можно зафиксировать в вашем git-репозитории. Все миграции (Go и JS) автоматически выполняются при запуске сервера.
Также обратите внимание, что автоматически сгенерированные миграции являются детализированными (в отличие от команды моментального снимка migrate collections
) и позволяют нескольким разработчикам независимо вносить изменения в коллекции (даже редактируя одну и ту же коллекцию), минимизируя возможные конфликты слияния. Вот пример файла миграции JS, который будет создан, например, если вы отредактируете одно название коллекции:
// pb_migrations/1669663597_updated_posts_old.js
migrate((db) => {
// up
const dao = new Dao(db)
const collection = dao.findCollectionByNameOrId("lngf8rb3dqu86r3")
collection.name = "posts_new"
return dao.saveCollection(collection)
}, (db) => {
// down
const dao = new Dao(db)
const collection = dao.findCollectionByNameOrId("lngf8rb3dqu86r3")
collection.name = "posts_old"
return dao.saveCollection(collection)
})
—
Добавлены новые помощники Dao
, чтобы упростить получение и обновление настроек приложения из миграции:
dao.FindSettings([optEncryptionKey])
dao.SaveSettings(newSettings, [optEncryptionKey])
—
core.Settings
перемещён в models/settings.Settings
:
core.Settings{} -> settings.Settings{}
core.NewSettings() -> settings.New()
core.MetaConfig{} -> settings.MetaConfig{}
core.LogsConfig{} -> settings.LogsConfig{}
core.SmtpConfig{} -> settings.SmtpConfig{}
core.S3Config{} -> settings.S3Config{}
core.TokenConfig{} -> settings.TokenConfig{}
core.AuthProviderConfig{} -> settings.AuthProviderConfig{}
—
Изменён интерфейс mailer.Mailer
(незначительное нарушение работы, если вы отправляете собственные электронные письма): app.NewMailClient().Send(from, to, subject, html, attachments?)
// New: app.NewMailClient().Send(&mailer.Message{ From: from, To: to, Subject: subject, HTML: html, Attachments: attachments, // new configurable fields Bcc: []string{"bcc1@example.com", "bcc2@example.com"}, Cc: []string{"cc1@example.com", "cc2@example.com"}, Headers: map[string]string{"Custom-Header": "test"}, Text: "custom plain text version", })
**Новый struct *mailer.Message* теперь также является членом событий *MailerRecordEvent* и *MailerAdminEvent***
- Другие незначительные исправления и улучшения пользовательского интерфейса.
## v0.8.0
⚠️ Этот релиз содержит критические изменения и требует некоторых шагов по ручной миграции!
Самое большое изменение — это объединение моделей *User* и коллекции *profiles* согласно #376 (https://github.com/pocketbase/pocketbase/issues/376).
Больше нет поля типа *user*, а пользователи представляют собой просто коллекцию «auth» (теперь мы поддерживаем типы коллекций, в настоящее время только «base» и «auth»).
Это должно упростить управление пользователями и в то же время позволить нам иметь неограниченное количество коллекций «auth», каждая со своими собственными настраиваемыми полями и вариантами аутентификации (например, персонал, клиент и т. д.).
В дополнение к объединению *Users* и *profiles*, этот релиз включает в себя несколько других улучшений:
— Добавлена поддержка косвенного расширения согласно #312 (https://github.com/pocketbase/pocketbase/issues/312#issuecomment-1242893496).
— Поле типа *json* теперь поддерживает фильтрацию и сортировку согласно #423 (https://github.com/pocketbase/pocketbase/issues/423#issuecomment-1258302125).
— В поле *relation* теперь можно использовать неограниченное *maxSelect* (то есть без верхнего предела).
— Добавлена поддержка комбинированной аутентификации по электронной почте/имени пользователя + паролю (см. ниже *authWithPassword()*).
— Добавлена поддержка полного управления пользователями типа «руководитель-подчинённый», включая специальное правило API, позволяющее напрямую изменять системные поля, такие как электронная почта, пароль и т.д., не требуя *oldPassword* или другой проверки пользователя.
— Включена привязка учётной записи OAuth2 при авторизованном запросе из той же коллекции auth (*это полезно, например, если поставщик OAuth2 не возвращает электронную почту и вы хотите связать её с текущим вошедшим пользователем*).
— Добавлена возможность переключать видимость столбцов записей в таблице списка.
— Добавлена поддержка переупорядочивания полей схемы коллекции.
— Добавлено несколько новых поставщиков OAuth2 (Microsoft Azure AD, Spotify, Twitch, Kakao).
— Улучшено использование памяти при загрузке больших файлов согласно #835 (https://github.com/pocketbase/pocketbase/discussions/835).
— Более подробные документы предварительного просмотра API и документация сайта (репозиторий находится по адресу https://github.com/pocketbase/site).
— Другие незначительные улучшения производительности (в основном связанные с поисковыми API).
### Миграция с версии v0.7.x
— **Данные.**
— **SDK.**
— **API.**
— **Внутренние компоненты.**
#### Данные
Объединение пользователей и профилей влечёт за собой несколько необходимых изменений в базе данных.
Самый простой способ применить их — использовать новую временную команду *upgrade*:
```sh
# убедитесь, что у вас есть копия pb_data на случай, если что-то пойдёт не так
cp -r ./pb_data ./pb_data_backup
# запустите команду обновления
./pocketbase08 upgrade
# запустите приложение как обычно
./pocketbase08 serve
Команда upgrade:
— Создаёт новую коллекцию users с объединёнными полями из таблицы _users и коллекции profiles. Новые записи пользователей будут иметь идентификаторы из коллекции profiles.
— Изменяет все поля типа user на relation и обновляет ссылки, чтобы они указывали на новые идентификаторы пользователей.
— Переименовывает все фильтры @collection.profiles., @request.user. и @request.user.profile.* в @collection.users.* и @request.auth.*.
— Добавляет 2 ко всем именам полей схемы и правилам фильтрации API, которые конфликтуют с новыми системными зарезервированными:
collectionId => collectionId2
collectionName => collectionName2
expand => expand2
// только для полей коллекции «profiles»:
username => username2
email => email2
emailVisibility =>
``` **emailVisibility2**
verified => verified2
tokenKey => tokenKey2
passwordHash => passwordHash2
lastResetSentAt => lastResetSentAt2
lastVerificationSentAt => lastVerificationSentAt2
#### SDKs
Please check the individual SDK package changelog and apply the necessary changes in your code:
— JavaScript SDK changelog
```sh
npm install pocketbase@latest --save
— Dart SDK changelog
dart pub add pocketbase:^0.5.0
# or with Flutter:
flutter pub add pocketbase:^0.5.0
You don't have to read this if you are using an official SDK.
Old | New |
---|---|
Authorization: Admin TOKEN | Authorization: TOKEN |
Authorization: User TOKEN | Authorization: TOKEN |
Old | New |
---|---|
2022-01-02 03:04:05.678 | 2022-01-02 03:04:05.678Z |
Old | New |
---|---|
@collectionId | collectionId |
@collectionName | collectionName |
@expand | expand |
Old | New |
---|---|
GET /api/users/auth-methods | GET /api/collections/:collection/auth-methods |
POST /api/users/refresh | POST /api/collections/:collection/auth-refresh |
POST /api/users/auth-via-oauth2 |
POST /api/collections/:collection/auth-with-oauth2
You can now also pass optional createData object on OAuth2 sign-up.
Also please note that now required user/profile fields are properly validated when creating new auth model on OAuth2 sign-up. |
POST /api/users/auth-via-email |
POST /api/collections/:collection/auth-with-password
Handles username/email + password authentication. {«identity»: «usernameOrEmail», «password»: «123456»}
|
POST /api/users/request-password-reset | POST /api/collections/:collection/request-password-reset |
POST /api/users/confirm-password-reset | POST /api/collections/:collection/confirm-password-reset |
POST /api/users/request-verification | POST |
В связи с вышеуказанными изменениями, свойство user
в ответе авторизации переименовано в record
.
Также был обновлён API администраторов для соответствия изменениям в API пользователей:
Старый | Новый |
---|---|
POST /api/администраторы/обновление | POST /api/администраторы/обновление-аутентификации |
POST /api/администраторы/аутентификация-через-email |
POST /api/администраторы/аутентификация-с-паролем
{"идентификатор": "test@example.com", "пароль": "123456"}
(обратите внимание, что поле тела электронной почты было переименовано в идентификатор )
|
Чтобы избежать путаницы с ответами метода аутентификации, следующие конечные точки теперь возвращают 204 без тела (ранее 200 с токеном и моделью аутентификации):
POST /api/administrators/подтверждение-сброс-пароля
POST /api/collections/:collection/подтверждение-сброс-пароля
POST /api/collections/:collection/подтверждение-верификации
POST /api/collections/:collection/подтверждение-изменение-электронной-почты
Были переименованы поля настроек, связанные с пользователями, возвращаемые GET /api/settings
:
Старый | Новый |
---|---|
пользовательAuthToken | записьAuthToken |
пользовательPasswordResetToken | записьPasswordResetToken |
пользовательEmailChangeToken | записьEmailChangeToken |
пользовательVerificationToken | записьVerificationToken |
Вы не обязаны Перевод текста на русский язык:
Прочитайте это, если вы не используете PocketBase в качестве фреймворка.
Старое | Новое |
---|---|
apis.RequireUserAuth() | apis.RequireRecordAuth(optCollectionNames ...string) |
apis.RequireAdminOrUserAuth() | apis.RequireAdminOrRecordAuth(optCollectionNames ...string) |
N/A | RequireSameContextRecordAuth()
(требует, чтобы учётная запись была из той же контекстной коллекции) |
Старое | Новое | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
dao.FindRecordById(collection, ...) | dao.FindRecordById(collectionNameOrId, ...) | |||||||||
dao.FindRecordsByIds(collection, ...) | dao.FindRecordsByIds(collectionNameOrId, ...) | |||||||||
dao.FindRecordsByExpr(collection, ...) | dao.FindRecordsByExpr(collectionNameOrId, ...) | |||||||||
dao.FindFirstRecordByData(collection, ...) | dao.FindFirstRecordByData(collectionNameOrId, ...) | |||||||||
dao.IsRecordValueUnique(collection, ...) | dao.IsRecordValueUnique(collectionNameOrId, ...) |
Старое | Новое | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
dao.UserQuery() | dao.RecordQuery(collection) | |||||||||
dao.FindUserById(id) | dao.FindRecordById(collectionNameOrId, id) | |||||||||
dao.FindUserByToken(token, baseKey) | dao.FindAuthRecordByToken(token, baseKey) | |||||||||
dao.FindUserByEmail(email) | dao.FindAuthRecordByEmail(collectionNameOrId, email) | |||||||||
N/A | dao.FindAuthRecordByUsername(collectionNameOrId, username) |
Старое | Новое | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
Путь импорта | ||||||||||
github.com/pocketbase/pocketbase/tools/rest | github.com/pocketbase/pocketbase/apis | |||||||||
Поля | **rest**.ApiError{} **apis**.ApiError{}ОнМейлерБефореЗаписьСбросПассвордСенд() | |||||||||
ОнМейлерАфтерПользователь СбросПассвордСенд() *hook.Hook[*MailerRecordEvent] | ||||||||||
ОнМейлерБефореПользовательВерификатионСенд() *hook.Hook[*MailerUserEvent] | ОнМейлерБефореЗапись ВерификатионСенд() *hook.Hook[*MailerRecordEvent] | |||||||||
ОнМейлерАфтерПользовательВерификатионСенд() *hook.Hook[*MailerUserEvent] | ОнМейлерАфтерЗапись ВерификатионСенд() *hook.Hook[*MailerRecordEvent] | |||||||||
ОнМейлерБефореПользовательЧенджЭмэйлСенд() *hook.Hook[*MailerUserEvent] | ОнМейлерБефореЗапись ЧенджЭмэйлСенд() *hook.Hook[*MailerRecordEvent] | |||||||||
ОнМейлерАфтерПользовательЧенджЭмэйлСенд() *hook.Hook[*MailerUserEvent] | ОнМейлерАфтерЗапись ЧенджЭмэйлСенд() *hook.Hook[*MailerRecordEvent] | |||||||||
ОнПользователиЛистРекуест() *hook.Hook[*Пользователь ЛистИвент] | ОнЗаписиЛистРекуест() *hook.Hook[*ЗаписиЛистИвент] | |||||||||
ОнПользовательВьюРекуест() *hook.Hook[*Пользователь ВьюИвент] | ОнЗаписьВьюРекуест() *hook.Hook[*ЗаписьВьюИвент] | |||||||||
ОнПользовательБефореКриэйтРекуест() *hook.Hook[*Пользователь КриэйтИвент] | ОнЗапись БефореКриэйтРекуест() *hook.Hook[*ЗаписьКриэйтИвент] | |||||||||
ОнПользовательАфтерКриэйтРекуест() *hook.Hook[*Пользователь КриэйтИвент] | ОнЗапись АфтерКриэйтРекуест() *hook.Hook[*ЗаписьКриэйтИвент] | |||||||||
ОнПользовательБефореАпдатеРекуест() *hook.Hook[*Пользователь АпдатеИвент] | ОнЗапись БефореАпдатеРекуест() *hook.Hook[*ЗаписьАпдатеИвент] | |||||||||
ОнПользовательАфтерАпдатеРекуест() *hook.Hook[*Пользователь АпдатеИвент] | ОнЗапись АфтерАпдатеРекуест() *hook.Hook[*ЗаписьАпдатеИвент] | |||||||||
ОнПользовательБефореДелитРекуест() *hook.Hook[*Пользователь ДелитИвент] | ОнЗапись БефореДелитРекуест() *hook.Hook[*ЗаписьДелитИвент] | |||||||||
ОнПользовательАфтерДелитРекуест() *hook.Hook[*Пользователь ДелитИвент] | ОнЗапись АфтерДелитРекуест() *hook.Hook[*ЗаписьДелитИвент] | |||||||||
ОнПользовательАутРекуест() *hook.Hook[*Пользователь АутИвент] | ОнЗапись АутРекуест() *hook.Hook[*ЗаписьАутИвент] | |||||||||
ОнПользовательЛистЭкстерналАутентикэйшнс() *hook.Hook[*Пользователь ЛистЭкстерналАутентикэйшнсИвент] | ОнЗапись ЛистЭкстерналАутентикэйшнс() *hook.Hook[*ЗаписьЛистЭкстерналАутентикэйшнсИвент] | |||||||||
ОнПользовательБефореУнклинЭкстерналАутентикэйшнРекуест() *hook.Hook[*Пользователь УнклинЭкстерналАутентикэйшнИвент] | **Текст запроса:**
Old | New |
---|---|
core.Settings.UserAuthToken{} | core.Settings.RecordAuthToken{} |
core.Settings.UserPasswordResetToken{} | core.Settings.RecordPasswordResetToken{} |
core.Settings.UserEmailChangeToken{} | core.Settings.RecordEmailChangeToken{} |
core.Settings.UserVerificationToken{} | core.Settings.RecordVerificationToken{} |
Перевод:
— Переименованы связанные с пользователем поля core.Settings: <таблица класс="д-таблэйр" видтв "100%" > <тр> <тх>Олд</тх> <тх>Нью</тх> </тр> <тр валгн топ> <тид кор точка сеттингс точка <стрнг>юзер</стрнг> аут токен {}</тид> <тид кор точка сеттингс точка <стрнг>рекорд</стрнг> аут токен {}</тид> </тр> <тр валгн топ> <тид кор точка сеттингс точка <стрнг>юзер</стрнг> пассворд ресет токен {}</тид> <тид кор точка сеттингс точка <стрнг>рекорд</стрнг> пассворд ресет токен {}</тид> </тр> <тр валгн топ> <тид кор точка сеттингс точка <стрнг>юзер</стрнг> емэйл чендж токен {}</тид> <тид кор точка сеттингс точка <стрнг>рекорд</стрнг> емэйл чендж токен {}</тид> </тр> <тр валгн топ> <тид кор точка сеттингс точка <стрнг>юзер</стрнг> верификейшн токен {}</тид> <тид кор точка сеттингс точка <стрнг>рекорд</стрнг> верификейшн токен {}</тид> </тр> </таблица>
Текст запроса:
The second argument of apis.StaticDirectoryHandler(fileSystem, enableIndexFallback) now is used to enable/disable index.html forwarding on missing file (eg. in case of SPA).
Перевод:
Второй аргумент apis точка статикт директори хендлер точка файлс стэм точка энбл индекс фэлбэквард теперь используется для включения/отключения переадресации index точка html при отсутствии файла (например, в случае SPA).
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )