Feat/login - #15
Conversation
|
Надо добавить в |
| }) | ||
|
|
||
| if (!verifyResponse.ok) { | ||
| const error = await verifyResponse.json().catch(() => ({})) |
There was a problem hiding this comment.
catch здесь на случай если пустой body пришел?
| // Invalidate the token on WordPress side | ||
| if (session.token && wpBaseUrl && authSecret) { | ||
| try { | ||
| await fetch(`${wpBaseUrl}/wp-json/sysblok/v1/auth/logout`, { |
There was a problem hiding this comment.
Используешь fetch с wpBaseUrl и authSecret второй раз. Сделай функцию wordpressAuthFetch или wordpressPostFetch. Можно в auth.ts чтоб разделить с клиенской логикой в wordpress.ts
There was a problem hiding this comment.
В реальности наши редакторы будут заходить в админку через Next и из админки на превью обратно. Чтоб не делать лишнего действия можно сразу редиректить на страницу логина wordpress и оставить только отображение ошибки.
| } | ||
|
|
||
| /* ========================================= | ||
| Auth bar (shown below nav when logged in) |
There was a problem hiding this comment.
Auth bar будет только редакторам отображаться, давай все стили сделаем через tailwind css в самой компоненте
| @@ -0,0 +1,11 @@ | |||
| 'use client' | |||
There was a problem hiding this comment.
Может тогда сделать весь AuthBar клиенской компонентой, чтоб серверную часть не затрагивало
| * | ||
| * If the cookie is missing on a protected route, redirects to /login. | ||
| */ | ||
| export function proxy(request: NextRequest) { |
There was a problem hiding this comment.
Этот прокси не нужен. Сейчас на проде если юзер не залогинен, приватные страницы просто отдают 404, давай так и оставим.
There was a problem hiding this comment.
Давай добавим изменение ссылки превью через фильтр preview_post_link, может с чекбоксом для включения. Можно в отдельную задачу выделить.
| * Description: Authentication bridge for headless Next.js frontend. Handles login redirect, session tokens, and REST API authentication. | ||
| * Version: 1.0.0 | ||
| * Author: Sysblok | ||
| * License: GPLv2 or later |
There was a problem hiding this comment.
Давай оставим GPLv2 и добавь LICENSE файл
| register_setting( | ||
| 'sysblok_headless_auth_group', | ||
| $this->option_name, | ||
| array($this, 'sanitize_settings') |
There was a problem hiding this comment.
Можно добавить дефолтное значение которое берется из переменных окружения.
| array($this, 'sanitize_settings') | |
| array( | |
| 'type' => 'array', | |
| 'sanitize_callback' => array($this, 'sanitize_settings'), | |
| 'default' => array( | |
| 'allowed_redirect_origin' => getenv('NEXT_PUBLIC_URL') || 'http://localhost:3000', | |
| 'auth_shared_secret' => getenv('WP_AUTH_SHARED_SECRET') || '', | |
| 'token_ttl' => 86400 | |
| ) | |
| ) |
Еще можно разделить значения в разные register_setting
| * Check for Bearer token in REST API requests and set the current user. | ||
| * This makes WordPress permission checks work automatically. | ||
| */ | ||
| public function authenticate_rest_request($user_id) { |
There was a problem hiding this comment.
Попробовал проверить на личном посте по ссылке: http://localhost:3000/posts/openai-otkatila-obnovlenie-gpt-4o-posle-zhalob
Получил 404 потому что статус "private" не отдается. Добавил в getPostBySlug параметр status: 'any'. Запрос вернулся с ошибкой 400, параметр status с таким значением запрещен, так же как если без аторизации сделать запрос.
| SSL_CERTS=./certificates | ||
|
|
||
| # Auth: WordPress login URL (change if using a custom login URL plugin) | ||
| NEXT_PUBLIC_WP_LOGIN_URL="https://sysblok.ru/wp-login.php" |
There was a problem hiding this comment.
Давай назовем WORDPRESS_LOGIN_SLUG, я в плагине смены сcылки логина переиспользую. Ненадо NEXT_PUBLIC чтоб на клиенте не было нашей секретной ссылки. Конечную ссылку тогда получай так: process.env.NEXT_PUBLIC_WORDPRESS_URL + '/' + process.env.WORDPRESS_LOGIN_SLUG
| NEXT_PUBLIC_WP_LOGIN_URL="https://sysblok.ru/wp-login.php" | |
| WORDPRESS_LOGIN_SLUG="wp-login.php" |
Нужно добавить плагин
sysblok-headless-auth.phpв код сайта и настроить, как описано в README.md.
Директория:
sysblok-headless-auth/sysblok-headless-auth.phpТакже в readme плагина - какие изменения нужно внести в
.env.localи как это работает. Спасибо Claude!Страница логина открывается на странице /login.
У залогиненного юзера под шапкой появляется узкая плашка с ником и кнопкой logout (не стала впихивать в шапку).