iron-session -это безопасная библиотека сеансов без сохранения состояния и сеанса на основе печенья для JavaScript.

Клерк - это полный набор встроенных пользовательских интерфейсов, гибких API и административных панелей для аутентификации и управления вашими пользователями.
Добавить аутентификацию за 7 минут
Данные сеанса хранятся в подписанных и зашифрованных файлах cookie, которые декодируются кодом вашего сервера без сохранения состояния (= не связана с сетью). Это та же самая техника, которая используется такими рамками, как Руби на рельсах.
Онлайн демонстрация и примеры: https://get-iron-session.vercel.app ?
Показано в документации NEXT.JS ️
getIronSession<T>(req, res, sessionOptions): Promise<IronSession<T>>getIronSession<T>(cookieStore, sessionOptions): Promise<IronSession<T>>session.save(): Promise<void>session.destroy(): voidsession.updateConfig(sessionOptions: SessionOptions): voidsealData(data: unknown, { password, ttl }): Promise<string>unsealData<T>(seal: string, { password, ttl }): Promise<T>pnpm add iron-sessionУ нас здесь тоже есть обширные примеры: https://get-iron-session.vercel.app/.
Чтобы получить сессию, есть единственный метод, чтобы знать: getIronSession .
// Next.js API Routes and Node.js/Express/Connect.
import { getIronSession } from 'iron-session' ;
export async function get ( req , res ) {
const session = await getIronSession ( req , res , { password : "..." , cookieName : "..." } ) ;
return session ;
}
export async function post ( req , res ) {
const session = await getIronSession ( req , res , { password : "..." , cookieName : "..." } ) ;
session . username = "Alison" ;
await session . save ( ) ;
} // Next.js Route Handlers (App Router)
import { cookies } from 'next/headers' ;
import { getIronSession } from 'iron-session' ;
export async function GET ( ) {
const session = await getIronSession ( cookies ( ) , { password : "..." , cookieName : "..." } ) ;
return session ;
}
export async function POST ( ) {
const session = await getIronSession ( cookies ( ) , { password : "..." , cookieName : "..." } ) ;
session . username = "Alison" ;
await session . save ( ) ;
} // Next.js Server Components and Server Actions (App Router)
import { cookies } from 'next/headers' ;
import { getIronSession } from 'iron-session' ;
async function getIronSessionData ( ) {
const session = await getIronSession ( cookies ( ) , { password : "..." , cookieName : "..." } ) ;
return session
}
async function Profile ( ) {
const session = await getIronSessionData ( ) ;
return < div > { session . username } </ div > ;
} У нас есть много разных моделей и примеров на онлайн-демонстрации, посмотрите: https://get-iron-session.vercel.app/.
✅ Производство готово и поддерживается.
Требуются два варианта: password и cookieName . Все остальное автоматически вычисляется и обычно не нужно менять. ****
password , требуется : закрытый ключ, используемый для шифрования cookie. Это должно быть не менее 32 символов длиной. Используйте https://1password.com/password-generator/, чтобы генерировать прочные пароли. password может быть либо string , либо object с клавишами увеличения, такими как это: {2: "...", 1: "..."} , чтобы разрешить вращение пароля. Железный сеанс будет использовать самый высокий пронумерованный ключ для новых файлов cookie.
cookieName , требуется : имя печенья, которое будет храниться
ttl , необязательно : в секундах. По умолчанию в эквивалент 14 дней. Вы можете установить это на 0 , а железная сессия вычислит максимально разрешенное значение по файлам cookie.
cookieOptions , необязательно : любой вариант, доступный от JSHTTP/cookie#serialize, за исключением encode , который не является атрибутом Set-Cookie. Смотрите атрибуты Mozilla Set-Cookie и хромированные поля печенья. По умолчанию:
{
httpOnly : true ,
secure : true , // set this to false in local (non-HTTPS) development
sameSite : "lax" , // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite#lax
maxAge : ( ttl === 0 ? 2147483647 : ttl ) - 60 , // Expire cookie before the session expires.
path : "/" ,
} getIronSession<T>(req, res, sessionOptions): Promise<IronSession<T>> type SessionData = {
// Your data
}
const session = await getIronSession < SessionData > ( req , res , sessionOptions ) ;getIronSession<T>(cookieStore, sessionOptions): Promise<IronSession<T>> type SessionData = {
// Your data
}
const session = await getIronSession < SessionData > ( cookies ( ) , sessionOptions ) ;session.save(): Promise<void>Сохраняет сессию. Это асинхронная операция. Это должно быть сделано и ожидается до того, как заголовки будут отправлены клиенту.
await session . save ( )session.destroy(): voidУничтожает сессию. Это синхронная операция, поскольку она только удаляет файлы cookie. Это должно быть сделано до того, как заголовки будут отправлены клиенту.
session . destroy ( )session.updateConfig(sessionOptions: SessionOptions): voidОбновляет конфигурацию сеанса с помощью новых параметров сеанса. Вам все еще нужно позвонить Save (), если вы хотите, чтобы они были применены.
sealData(data: unknown, { password, ttl }): Promise<string> Это базовый метод и механизм уплотнения, который поддерживает iron-session . Вы можете использовать его, чтобы запечатать любые data , которые вы хотите, и передать их. Одним из использований является волшебным ссылками: вы генерируете уплотнение, которое содержит идентификатор пользователя для входа и отправляю его на маршрут на вашем веб-сайте (например, /magic-login ). После получения вы можете безопасно расшифровать уплотнение с помощью unsealData и ввести пользователя.
unsealData<T>(seal: string, { password, ttl }): Promise<T> Это противоположность sealData и позволяет вам декодировать уплотнение, чтобы вернуть исходные данные.
Это делает ваши сеансы без сохранения состояния: поскольку данные передаются в файлах cookie, вам не нужен сервер или служба для хранения данных сеанса.
Более подробную информацию также можно найти на веб -сайте Ruby on Rails, который использует ту же технику.
Сессии не могут быть мгновенно недействительными (или «отключить этого клиента»), так как обычно не хранятся в отношении сеансов на сервере по умолчанию. Однако в большинстве приложений первым шагом после получения аутентифицированного запроса является проверка пользователя и его разрешения в базе данных. Таким образом, чтобы легко отключить клиентов (или аннулировать сеансы), вы можете добавить в базу данных состояние `isblocked`` и создать пользовательский интерфейс для блокировки клиентов.
Затем каждый раз, когда получен запрос, который включает чтение или изменение конфиденциальных данных, обязательно проверяйте этот флаг.
Да, мы выставляем sealData и unsealData , которые не привязаны к печенью. Таким образом, вы можете запечатать и распечатывать любой объект в вашем приложении и перемещать уплотнения, чтобы войти в систему пользователей.
Не так много:
В зависимости от ваших собственных потребностей и предпочтений, iron-session может соответствовать или не может соответствовать вам.
@hapi/iron .@hapi/iron в виде iron-webcrypto с использованием стандартных веб-API.next-connect и next-session .