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

SDK React Native

Abrova Auth برای React Native و Expo (@abrova/auth-react-native). ورود ناشناس، Apple، Google، ایمیل و رمز عبور، لینک یک‌بارمصرف و تلگرام فقط با کلید عمومی؛ refresh token در Keychain یا Keystore از طریق react-native-keychain یا expo-secure-store؛ token provider برای همه‌ی SDKهای ابرووا.

React Native 0.1.1Expo or bareبه‌روزرسانی: ۵ آبان ۱۴۰۵
امن برای کلاینت

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

Expo یا bare

react-native-keychain یا expo-secure-store برای نشست

حافظه‌ی امن

refresh token فقط روی همین دستگاه؛ access token در حافظه

token provider

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

همان API وب

یک مجموعه فراخوانی برای کد وب و موبایل

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

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

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

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

پیش‌نیازها.

React Native با react-native-keychain، یا Expo با expo-secure-store. ورود با Apple و Google به crypto.getRandomValues (react-native-get-random-values) هم نیاز دارد.

از دستیار هوش مصنوعی استفاده می‌کنید؟ این صفحه را با 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-react-native react-native-keychain
# or, with Expo
npx expo install @abrova/auth-react-native expo-secure-store

یا در package.json:

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

برای nonce ورود با Apple و Google، react-native-get-random-values را هم نصب کنید و آن را در ابتدای index.js import کنید:

bash
npm install react-native-get-random-values
typescript
// index.js, before anything else
import 'react-native-get-random-values';

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

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

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

typescript
import * as Keychain from 'react-native-keychain';
import { createAbrovaAuth, keychainStorage } from '@abrova/auth-react-native';

export const auth = createAbrovaAuth({
  apiKey: 'ab_live_your_api_key',
  storage: keychainStorage(Keychain),
});

auth.onAuthStateChanged((userId) => {
  console.log(userId ? `signed in as ${userId}` : 'signed out');
});

با Expo:

typescript
import * as SecureStore from 'expo-secure-store';
import { createAbrovaAuth, secureStoreStorage } from '@abrova/auth-react-native';

export const auth = createAbrovaAuth({ apiKey: 'ab_live_your_api_key', storage: secureStoreStorage(SecureStore) });

فقط refresh token ذخیره می‌شود (Keychain در iOS، حافظه‌ی متکی به Keystore در Android، فقط روی همین دستگاه). access token در حافظه می‌ماند. بدون storage، هیچ چیز بعد از راه‌اندازی دوباره‌ی اپ باقی نمی‌ماند.

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

ورود#

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

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

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

به‌زودی. Abrova Sync، Chat، Push، Storage و A/B Testing به‌زودی می‌آیند. فراخوانی‌های زیر نشان می‌دهند کاربر Auth را چطور خواهند گرفت؛ هنوز در دسترس نیستند.
typescript
import AbrovaSync from '@abrova/sync-react-native';

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

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

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

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

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

typescript
const result = await auth.signUpWithEmail({ email, password, redirectUrl: 'myapp://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: 'myapp://auth/reset' });
await auth.resetPassword({ token, password }); // token from the link's ?token=
await auth.verifyEmail({ token });

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

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

// When the app is opened with the link (Linking):
const token = new URL(url).searchParams.get('token');
if (token) await auth.signInWithMagicLink({ token });

تلگرام

typescript
import { Linking } from 'react-native';

const { sent, botUrl } = await auth.requestTelegramCode({ phone: '+989121234567' });
if (!sent && botUrl) await Linking.openURL(botUrl);
await auth.verifyTelegramCode({ phone: '+989121234567', code: '123456' });

Apple و Google

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

typescript
const { rawNonce, hashedNonce } = await auth.createNonce();
// Give hashedNonce to your Apple / Google sign-in library as the `nonce`.
await auth.signInWithApple({ idToken, rawNonce, authorizationCode });
await auth.signInWithGoogle({ idToken, rawNonce });

برای هر ورود یک nonce جدید بسازید. ورود با Google به اتصال به Google، و در Android به Google Play services هم، نیاز دارد؛ بعضی کاربران در ایران هیچ‌کدام را ندارند. ناشناس، ایمیل و رمز عبور، لینک یک‌بارمصرف و کد تلگرام بدون Google کار می‌کنند، پس دست‌کم یکی از آن‌ها را هم ارائه کنید. ورود با Google را ببینید.

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

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

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

try {
  await auth.linkApple({ idToken, rawNonce }); // or linkGoogle(...), linkPassword({ email, password })
} catch (e) {
  if (isAbrovaAuthError(e) && e.code === 'PROVIDER_ALREADY_LINKED') {
    // This Apple ID 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 (required by the App Store)

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

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

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

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 ۲ دقیقه پیش از انقضا تمدید می‌شود و فراخوانی‌های هم‌زمان در یک تمدید شریک می‌شوند. همه‌ی کدها: کدهای خطا.

عیب‌یابی#

خروج بعد از هر بار راه‌اندازی دوباره

storage: keychainStorage(Keychain) یا secureStoreStorage(SecureStore) را بدهید. بدون آن، نشست فقط در حافظه نگه داشته می‌شود.

createNonce با NOT_CONFIGURED شکست می‌خورد

crypto.getRandomValues وجود ندارد. react-native-get-random-values را نصب کنید و آن را در ابتدای index.js import کنید.

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

redirectUrl باید با یکی از آدرس‌های لینک در Abrova Auth › تنظیمات شروع شود، مثلاً myapp://auth.

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