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

استفاده با محصولات دیگر ابرووا

توکنِ کاربرِ واردشده در Abrova Auth همان توکن کاربر استاندارد ابرووا است. token provider مربوط به SDK Auth را به Abrova Sync، Chat، Push، A/B Testing و Storage بدهید تا قوانین امنیتی‌شان کاربر را به‌صورت auth.uid ببینند. بدون نیاز به سرور.

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

Abrova Sync، Chat، Push، A/B Testing و Storage کاربر اپ شما را با یک توکن کاربر ابرووای امضاشده می‌شناسند. بدون Abrova Auth، سرور خودتان این توکن را با کلید سرور می‌سازد. با Abrova Auth، توکن از قبل در SDK Auth هست: token provider آن را به SDKهای دیگر بدهید تا به‌عنوان کاربرِ واردشده عمل کنند.

به‌زودی. Abrova Sync، Chat، Push، Storage و A/B Testing به‌زودی می‌آیند. این صفحه نشان می‌دهد وقتی راه بیفتند کاربر Auth را چطور می‌گیرند؛ فعلاً قابل استفاده نیستند. امروز کاربرِ واردشده با ابرووا تریس کار می‌کند.

ابرووا تریس، از امروز#

ابرووا تریس فعال است. شناسه‌ی کاربر Abrova Auth را به آن بدهید تا خطاها و کرش‌ها نشان دهند برای کدام کاربر رخ داده‌اند. آن را بعد از ورود تنظیم کنید و بعد از خروج پاک کنید:

dart
// Flutter
AbrovaTrace.setUserId(AbrovaAuth.instance.currentUser!.id);
swift
// iOS
AbrovaTrace.shared.setUserId(AbrovaAuth.shared.currentUserId)   // nil after sign-out
kotlin
// Android
AbrovaTrace.setUserId(AbrovaAuth.shared.currentUserId)   // null after sign-out

تریس فقط شناسه‌ی کاربر را می‌گیرد؛ به توکن نیازی ندارد. SDK Flutter تریس، SDK iOS و SDK Android را ببینید.

چه چیزی به دست می‌آورید#

  • قوانین امنیتی Sync بدون سرور کار می‌کنند. auth.uid همان شناسه‌ی کاربر Abrova Auth (ru_...) است، پس data.ownerId === auth.uid از سندهای هر کاربر محافظت می‌کند. قوانین امنیتی Sync را ببینید.
  • Chat می‌داند چه کسی صحبت می‌کند. پیام‌ها به نام کاربرِ توکن فرستاده می‌شوند؛ هیچ‌کس نمی‌تواند به جای دیگری بنویسد.
  • قوانین دسترسی Storage کاربر را می‌بینند. قوانینی مثل users/{userId}/** به هر کاربر اجازه می‌دهند فقط فایل‌های خودش را بخواند و بنویسد. قوانین دسترسی Storage را ببینید.
  • A/B Testing و Push رویدادها، variantها و پیام‌های inbox را به کاربر وصل می‌کنند، از جمله کاربران ناشناسی که هنوز به‌طور کامل وارد نشده‌اند.
  • چیز اضافه‌ای برای وصل کردن نیست. SDKهای دیگر یک token provider می‌گیرند. توکن همان توکنی است که سرور خودتان می‌ساخت.

توکن چطور جریان پیدا می‌کند#

  1. ۱یک SDK دیگر ابرووا به توکن نیاز داردهنگام شروع، پیش از یک درخواست، یا وقتی توکنش نزدیک انقضاست، provider را که به آن داده‌اید صدا می‌زند.
  2. ۲SDK Auth پاسخ می‌دهدبا access token فعلی، که اگر کمتر از ۲ دقیقه از اعتبارش مانده باشد اول تمدید می‌شود. فراخوانی‌های هم‌زمان در یک تمدید شریک می‌شوند.
  3. ۳محصول آن را بررسی می‌کندامضا، پروژه و زمان انقضا را بررسی می‌کند و شناسه‌ی کاربر را از توکن برمی‌دارد.

وقتی کسی وارد نشده، provider توکنی برنمی‌گرداند (یا برای Chat خطا می‌دهد)، و هر SDK همان‌طور که مستنداتش می‌گوید منتظر کاربر می‌ماند.

دادن token provider#

این محصولات به‌زودی می‌آیند؛ فراخوانی‌های زیر نشان می‌دهند توکن را چطور خواهند گرفت.

هر جا SDKی شناسه‌ی کاربر خواست (userId در Chat، setUserId در A/B Testing)، شناسه‌ی کاربر را از Abrova Auth بدهید تا با توکن جور باشد.

Flutter

dart
final auth = AbrovaAuth.instance;

// Abrova Sync
await AbrovaSync.init(AbrovaSyncConfig(
  apiKey: 'ab_live_your_api_key',
  tokenProvider: auth.tokenProvider,
));

// Abrova Push
await AbrovaPush.init(AbrovaPushConfig(
  apiKey: 'ab_live_your_api_key',
  tokenProvider: auth.tokenProvider,
));

// Abrova A/B Testing
await AbrovaAbTesting.init(AbrovaAbTestingConfig(
  apiKey: 'ab_live_your_api_key',
  tokenProvider: auth.tokenProvider,
));

// Abrova Storage
final storage = AbrovaStorage(
  apiKey: 'ab_live_your_api_key',
  tokenProvider: auth.tokenProvider,
);

// Abrova Chat: its provider must return a token, so use chatTokenProvider
final chat = AbrovaChatClient(AbrovaChatConfig(
  apiKey: 'ab_live_your_api_key',
  userId: auth.currentUser!.id,
  tokenProvider: auth.chatTokenProvider,
));

وقتی کسی وارد نشده، tokenProvider مقدار null برمی‌گرداند. chatTokenProvider به جای آن خطای UNAUTHENTICATED می‌دهد؛ کلاینت Chat را بعد از ورود بسازید.

iOS

swift
let auth = AbrovaAuth.shared

// Abrova Sync
sync.userTokens.provider = auth.tokenProvider

// Abrova Push
AbrovaPushConfig(apiKey: key, tokenProvider: auth.tokenProvider)

// Abrova Storage
let storage = AbrovaStorage(apiKey: key, userTokenProvider: auth.tokenProvider)

// Abrova Chat: create the client after sign-in
AbrovaChatConfig(apiKey: key, userId: auth.currentUserId!, tokenProvider: auth.strictTokenProvider)

// Abrova A/B Testing takes a completion handler
AbrovaAbTestingConfig(apiKey: key, tokenProvider: { completion in
    Task {
        do { completion(.success(try await auth.strictTokenProvider())) }
        catch { completion(.failure(error)) }
    }
})

وقتی کسی وارد نشده، tokenProvider مقدار nil برمی‌گرداند؛ strictTokenProvider خطا می‌دهد.

Android

kotlin
val auth = AbrovaAuth.shared

// Abrova Sync: its provider is called off the main thread
AbrovaSyncConfig.builder(apiKey).userTokenProvider(auth.blockingTokenProvider).build()

// Abrova Push
AbrovaPushConfig(apiKey = apiKey, tokenProvider = auth.tokenProvider)

// Abrova Storage: also called off the main thread
AbrovaStorage.builder(apiKey).userTokenProvider(auth.blockingTokenProvider).build()

// Abrova A/B Testing: also called off the main thread
AbrovaAbTestingConfig(apiKey = apiKey, tokenProvider = AbrovaTokenProvider { auth.blockingTokenProvider() })

// Abrova Chat: create the client after sign-in
AbrovaChatConfig(apiKey = apiKey, userId = auth.currentUserId!!, tokenProvider = auth.strictTokenProvider)

tokenProvider یک تابع suspend است که وقتی کسی وارد نشده null برمی‌گرداند؛ strictTokenProvider به جای آن خطا می‌دهد؛ blockingTokenProvider thread فراخواننده را block می‌کند و هرگز نباید روی main thread اجرا شود.

Web

typescript
import { createAbrovaAuth } from '@abrova/auth-web';
import { AbrovaSync } from '@abrova/sync-web';
import { AbrovaStorage } from '@abrova/storage-web';

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

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

// Abrova Chat: auth.tokenProvider rejects with UNAUTHENTICATED while signed out
const chat = new AbrovaChatClient({
  apiKey: 'ab_live_your_api_key',
  userId: auth.currentUserId!,
  tokenProvider: auth.tokenProvider,
});

React Native

typescript
import AbrovaSync from '@abrova/sync-react-native';
import { AbrovaStorage } from '@abrova/storage-react-native';

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

// Abrova Chat: create the client after sign-in
const chat = new AbrovaChatClient({
  apiKey: 'ab_live_your_api_key',
  userId: auth.currentUserId!,
  tokenProvider: auth.tokenProvider,
});

وقتی کاربر وارد یا خارج می‌شود#

SDKهای دیگر توکنی را که دارند cache می‌کنند. بعد از ورود، خروج یا جابه‌جایی به کاربر دیگر، به آن‌ها بگویید دوباره از provider بخواهند:

محصولفراخوانی
Abrova SyncAbrovaSync.refreshUserToken() (Flutter، React Native، Web)؛ sync.userTokens.refresh() (Android)؛ sync.refreshUserToken() (iOS)
Abrova A/B TestingrefreshUserToken() بعد از ورود؛ clearUserId() بعد از خروج
Abrova Storagestorage.refreshUserToken() (همه‌ی پلتفرم‌ها). تا وقتی کسی وارد نشده، فراخوانی‌های فایل منتظر می‌مانند و بعد از ورود ادامه می‌یابند.
Abrova Chatکلاینت را برای کاربر جدید بسازید؛ قبلی را قطع کنید

به وضعیت ورود SDK Auth (authStateChanges، onAuthStateChanged، addAuthStateListener یا authState) گوش دهید و این فراخوانی‌ها را همان‌جا انجام دهید تا همه‌ی محصولات کاربر را دنبال کنند.

نوشتن قوانین امنیتی برای کاربر#

شناسه‌ی کاربر در توکن، همان auth.uid در قوانین Abrova Sync است. آن را در سندهایی که مال کاربرند ذخیره کنید:

json
{
  "rules": {
    "notes": {
      ".read": "data.ownerId === auth.uid",
      ".write": "newData.ownerId === auth.uid"
    }
  }
}
dart
await AbrovaSync.database('my-app').collection('notes').add({
  'ownerId': AbrovaAuth.instance.currentUser!.id,
  'text': 'Hello',
});

سپس Require signed user tokens را برای Sync در کنسول روشن کنید تا فقط توکن امضاشده بتواند auth.uid را تعیین کند. قوانین امنیتی Sync را ببینید.

همراه با سرور خودتان#

همچنان می‌توانید روی سرور خودتان با کلید سرور (POST https://auth.abrova.ir/users/token) برای شناسه‌های کاربرِ خودتان توکن بسازید. هر دو نوع توکن در همه‌ی محصولات کار می‌کنند. برای هر اپ یک منبع شناسه‌ی کاربر نگه دارید تا یک شخص دو کاربر نشود.

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