ابرووا
شروع رایگان
☰ فهرست مستندات · SDK وب

SDK Web

Abrova Auth برای مرورگر (@abrova/auth-web). ورود ناشناس، Apple، Google، ایمیل و رمز عبور، لینک یک‌بارمصرف و تلگرام فقط با کلید عمومی؛ access token در حافظه، ذخیره‌سازی اختیاری، و token provider برای همه‌ی SDKهای ابرووا.

Web 0.1.1به‌روزرسانی: ۵ آبان ۱۴۰۵
امن برای کلاینت

فقط از کلید API عمومی استفاده می‌کند. قرار دادنش در bundle مرورگر امن است

هر فریم‌ورکی

TypeScript ساده: React، Vue، Svelte، کد سمت کلاینت Next.js، یا بدون فریم‌ورک

پیش‌فرض در حافظه

تا خودتان نخواهید چیزی ذخیره نمی‌شود

token provider

tokenProvider و getToken() برای SDKهای دیگر ابرووا

تابع کمکی nonce

createNonce() برای Apple JS و Google Identity Services

ارتقای مهمان‌ها

linkApple، linkGoogle و linkPassword شناسه‌ی کاربر را حفظ می‌کنند

SDK Web برای Abrova Auth نسخه‌ی v0.1.1.

این صفحه @abrova/auth-web نسخه‌ی 0.1.1 را توضیح می‌دهد.

پیش‌نیازها.

مرورگری با fetch و crypto.getRandomValues (همه‌ی مرورگرهای فعلی). فقط در کد سمت کلاینت اجرا می‌شود؛ Abrova Auth SDK سرور ندارد.

از دستیار هوش مصنوعی استفاده می‌کنید؟ این صفحه را با Copy page for AI به آن بدهید، یا همه‌ی مستندات را به‌صورت متن ساده از /docs/llms.txt بگیرید. دستیارهای هوش مصنوعی را ببینید.

نصب#

پکیج از Abrova Center می‌آید. اول در .npmrc پروژه، scope @abrova را به رجیستری ابرووا ارجاع دهید:

.npmrcINI
@abrova:registry=https://center.abrova.ir/api/packages/abrova/npm/

سپس نصب کنید:

bash
npm install @abrova/auth-web

یا در package.json:

json
{
  "dependencies": {
    "@abrova/auth-web": "^0.1.1"
  }
}

در کنسول ابرووا، Abrova Auth را برای پروژه (تنظیمات › محصولات) و روش‌های ورود دلخواه را (Abrova Auth › روش‌های ورود) روشن کنید.

مقداردهی اولیه#

برای اپ یک کلاینت با کلید API عمومی (ab_live_...) بسازید:

typescript
import { createAbrovaAuth } from '@abrova/auth-web';

export const auth = createAbrovaAuth({ apiKey: 'ab_live_your_api_key' });

auth.onAuthStateChanged((userId) => {
  console.log(userId ? `signed in as ${userId}` : 'signed out');
});
گزینهپیش‌فرضتوضیح
apiKey-کلید API عمومی شما (ab_live_...). هرگز کلید سرور نه.
storagememoryجایی که refresh token بین بارگذاری‌های صفحه نگه داشته می‌شود. «وارد ماندن» را ببینید.
storageKeyبرگرفته از کلید APIکلید ذخیره‌سازی، تا دو پروژه هرگز یک نشست مشترک نداشته باشند.
timeoutMs15000مهلت درخواست به میلی‌ثانیه.

await auth.ready() وقتی نشست ذخیره‌شده (اگر باشد) بارگذاری شد resolve می‌شود. onAuthStateChanged در همان لحظه listener شما را با شناسه‌ی کاربر فعلی صدا می‌زند، و دوباره در هر ورود یا خروج. یک تابع برمی‌گرداند که گوش دادن را متوقف می‌کند.

ورود#

typescript
const { methods } = await auth.getMethods(); // e.g. ['anonymous', 'google', 'password']

await auth.ready();
if (!auth.isSignedIn && methods.includes('anonymous')) {
  await auth.signInAnonymously();
}
console.log(auth.currentUserId); // ru_...

فقط دکمه‌های روش‌هایی را نشان دهید که getMethods() برمی‌گرداند.

استفاده از کاربر با SDKهای دیگر ابرووا#

به‌زودی. Abrova Sync، Chat، Push، Storage و A/B Testing به‌زودی می‌آیند. فراخوانی‌های زیر نشان می‌دهند کاربر Auth را چطور خواهند گرفت؛ امروز کاربر را با SDK Next.js ابرووا تریس (setUserId(auth.currentUserId)) به تریس وصل کنید.
typescript
import { AbrovaSync } from '@abrova/sync-web';

// Sync, Push and A/B Testing: null while signed out
const sync = new AbrovaSync({ apiKey: 'ab_live_your_api_key', tokenProvider: () => auth.getToken() });

auth.getToken() به یک access token تازه resolve می‌شود، یا وقتی کسی وارد نشده به null. auth.tokenProvider به توکن resolve می‌شود و وقتی کسی وارد نشده با UNAUTHENTICATED reject می‌شود: از آن برای Abrova Chat استفاده کنید که provider آن باید توکن برگرداند. بعد از ورود یا خروج، متد refresh آن SDK را صدا بزنید (مثلاً sync.refreshUserToken()). بیشتر: استفاده با محصولات دیگر ابرووا.

روش‌های ورود#

هر روش صفحه‌ی خودش را با راه‌اندازی کنسول دارد: ناشناس، Apple، Google، ایمیل و رمز عبور، لینک یک‌بارمصرف، تلگرام.

ایمیل و رمز عبور

typescript
const result = await auth.signUpWithEmail({ email, password, redirectUrl: 'https://example.com/auth/verify' });
// result.signedIn is false when the project requires a verified e-mail first.

await auth.signInWithEmail({ email, password });

await auth.sendPasswordReset({ email, redirectUrl: 'https://example.com/auth/reset' });
await auth.resetPassword({ token, password }); // token from the link's ?token=
await auth.verifyEmail({ token });
await auth.sendEmailVerification({ redirectUrl: 'https://example.com/auth/verify' });

لینک یک‌بارمصرف

typescript
await auth.sendMagicLink({ email, redirectUrl: 'https://example.com/auth/magic' });

// On the page the link opens:
const token = new URL(location.href).searchParams.get('token');
if (token) await auth.signInWithMagicLink({ token });

تلگرام

typescript
const { sent, botUrl } = await auth.requestTelegramCode({ phone: '+989121234567' });
if (!sent && botUrl) window.open(botUrl); // the user starts the bot and shares the number
await auth.verifyTelegramCode({ phone: '+989121234567', code: '123456' });

Apple و Google

ورودِ خودِ ارائه‌دهنده را با nonce‌ای از SDK اجرا کنید، سپس ID token آن را به ابرووا بدهید:

typescript
const { rawNonce, hashedNonce } = await auth.createNonce();
// Give hashedNonce to Google Identity Services or Sign in with Apple JS as the `nonce`.
await auth.signInWithGoogle({ idToken, rawNonce });
await auth.signInWithApple({ idToken, rawNonce, authorizationCode, name });

برای هر ورود یک nonce جدید بسازید. ورود با Google به اتصال به Google نیاز دارد که بعضی کاربران در ایران ندارند. ناشناس، ایمیل و رمز عبور، لینک یک‌بارمصرف و کد تلگرام بدون Google کار می‌کنند، پس دست‌کم یکی از آن‌ها را هم ارائه کنید. ورود با Google را ببینید. روی وب، Apple از Services ID شما استفاده می‌کند: آن را در Abrova Auth › روش‌های ورود › Apple اضافه کنید.

ارتقای کاربر ناشناس#

وصل کردن شناسه‌ی کاربر را حفظ می‌کند، پس داده‌های کاربر مال خودش می‌ماند:

typescript
import { isAbrovaAuthError } from '@abrova/auth-web';

try {
  await auth.linkGoogle({ idToken, rawNonce }); // or linkApple(...), linkPassword({ email, password })
} catch (e) {
  if (isAbrovaAuthError(e) && e.code === 'PROVIDER_ALREADY_LINKED') {
    // This Google account already belongs to another user.
  }
}

کاربر فعلی#

typescript
auth.currentUserId;           // null when signed out
auth.isSignedIn;
const me = await auth.getMe(); // { id, anonymous, emailVerified, createdAt, providers }
auth.currentUser;             // the user last loaded by getMe()

خروج و حذف حساب#

typescript
await auth.signOut();           // this device
await auth.signOutEverywhere(); // every device
await auth.deleteAccount();     // deletes the user, then signs out

وارد ماندن#

به‌طور پیش‌فرض چیزی ذخیره نمی‌شود: کاربر بعد از reload صفحه دوباره وارد می‌شود. برای نگه داشتن نشست، localStorage را فعال کنید:

typescript
import { createAbrovaAuth, localStorageStorage } from '@abrova/auth-web';

const auth = createAbrovaAuth({ apiKey: 'ab_live_your_api_key', storage: localStorageStorage() });
localStorage و XSS.

هر اسکریپتی در صفحه‌ی شما می‌تواند localStorage را بخواند. یک باگ XSS یا یک وابستگی آلوده می‌تواند refresh token و همراه آن نشست کاربر را بردارد. از این گزینه فقط با یک Content Security Policy سخت‌گیرانه و بدون اسکریپت‌های نامطمئن استفاده کنید. SDK هرگز cookie تنظیم نمی‌کند.

می‌توانید حافظه‌ی دلخواه خودتان را هم بدهید: شیئی با متدهای async به نام get، set و remove.

مدیریت خطاها#

هر شکست یک AbrovaAuthError با یک code است:

typescript
import { isAbrovaAuthError } from '@abrova/auth-web';

try {
  await auth.signInWithEmail({ email, password });
} catch (e) {
  if (isAbrovaAuthError(e) && e.code === 'INVALID_CREDENTIALS') showError('Wrong e-mail or password');
  if (isAbrovaAuthError(e) && e.code === 'RATE_LIMITED') retryIn(e.retryAfterSec);
}

SDK علاوه بر کدهای سرور از NETWORK_ERROR استفاده می‌کند. خطای شبکه هرگز کاربر را خارج نمی‌کند؛ نشستِ لغوشده یا منقضی این کار را می‌کند (onAuthStateChanged(null)). access token ۲ دقیقه پیش از انقضا تمدید می‌شود و فراخوانی‌های هم‌زمان در یک تمدید شریک می‌شوند. همه‌ی کدها: کدهای خطا.

عیب‌یابی#

خروج بعد از هر reload

این رفتار پیش‌فرض است: نشست در حافظه نگه داشته می‌شود. اگر صفحه‌تان Content Security Policy سخت‌گیرانه دارد، storage: localStorageStorage() را بدهید، یا دوباره به‌صورت ناشناس وارد شوید.

مقدار currentUserId درست بعد از reload برابر null است

نشست ذخیره‌شده به‌صورت async بارگذاری می‌شود. منتظر auth.ready() یا اولین فراخوانی onAuthStateChanged بمانید.

لینک ایمیلی با INVALID_INPUT رد می‌شود

redirectUrl باید با یکی از آدرس‌های لینک در Abrova Auth › تنظیمات شروع شود.

این صفحه مفید بود؟
گزارش مشکل