aura.auth का दैनिक प्रवाह, प्रत्येक कॉल के व्यवहार के साथ जैसा कि एक रनिंग स्टैक के विरुद्ध देखा गया है।
यह अंग्रेजी पाठ फ़्रेंच मूल से स्वचालित रूप से उत्पन्न हुआ था और अभी तक इसकी समीक्षा नहीं की गई है।
इस अनुवाद के बाद से अंग्रेजी स्रोत बदल गया है। कुछ जानकारी पुरानी हो सकती है.
यह पृष्ठ स्वचालित रूप से अनुवादित किया गया था. अंग्रेजी संस्करण प्रामाणिक है.
#मूल बातें
1. साइन अप करें और साइन इन करें
auth.tstypescript
import { createClient, isMfaChallenge } from '@aurabase/aurabase-js'
const aura = createClient(process.env.AURA_URL!, process.env.AURA_ANON_KEY!)
// खाता बनाएं
const { data, error } = await aura.auth.signUp({ email: 'ada@example.com', password: 'a-long-passphrase' })
// दाखिल करना
const login = await aura.auth.signInWithPassword({ email: 'ada@example.com', password: 'a-long-passphrase' })
if (login.error) return showError(login.error.message)
if (login.data && isMfaChallenge(login.data)) return askForTotpCode(login.data.mfa_token)
// अन्यथा अब एक सत्र मौजूद है
दोनों कॉल एक ही आकार में लौटती हैं। सफलता पर, data access_token, refresh_token, expires_in (900 सेकंड) और user रखता है, और क्लाइंट आपके लिए सत्र संग्रहीत करता है। अगला अनुरोध पहले ही प्रमाणित हो चुका है.
signUp क्या करता है यह आपकी प्रोजेक्ट सेटिंग्स पर निर्भर करता है। हमारे परीक्षण प्रोजेक्ट में इसने उपयोगकर्ता को email_verified: false के साथ तुरंत साइन इन किया, और किसी प्रोजेक्ट को पहले पुष्टि की आवश्यकता हो सकती है।
विफलताओं को आपको संभालना चाहिए, जैसा कि देखा गया है:
| पुकारना | गलती |
|---|
| ग़लत पासवर्ड | 401, code: 'invalid_credentials', "पहचानकर्ता अमान्य" |
| अमान्य या समाप्त हो चुका लिंक या कोड | 401, code: 'invalid_otp' |
| जब प्रोजेक्ट इसकी अनुमति नहीं देता तो अनाम साइन-इन करें | 403, FORBIDDEN |
signInAnonymously() बिना ई-मेल पते के एक उपयोगकर्ता बनाता है, लेकिन एक नए प्रोजेक्ट में यह अक्षम है और 403 लौटाता है जब तक कि आप इसे प्रोजेक्ट की ऑथ सेटिंग्स में सक्षम नहीं करते।
#राज्य
2. सत्र और उसके कार्यक्रम
session.tstypescript
const { data: { session } } = await aura.auth.getSession() // कोई नेटवर्क कॉल नहीं: स्टोर पढ़ता है
const { data: user } = await aura.auth.getUser() // सर्वर से पूछता है
const { data: { subscription } } = aura.auth.onAuthStateChange(({ event, user }) => {
// घटना: 'INITIAL_SESSION' | 'SIGNED_IN' | 'टोकन_ताज़ा' | 'USER_UPDATED' | 'SIGNED_OUT' | 'एमएफए_चुनौती'
})
subscription.unsubscribe()
एक वास्तविक रन ने इस अनुक्रम का उत्पादन किया: INITIAL_SESSION, SIGNED_IN (साइन-अप), SIGNED_IN (साइन-इन), USER_UPDATED, TOKEN_REFRESHED, SIGNED_OUT।
- क्लाइंट एक्सेस टोकन के समाप्त होने से पहले उसे रीफ्रेश करता है। इसे बाध्य करने के लिए
aura.auth.refreshSession() पर कॉल करें।
getSession() स्थानीय और तेज़ है: रेंडरिंग के लिए इसका उपयोग करें। जब आपको सर्वर के उपयोगकर्ता के वर्तमान दृश्य की आवश्यकता हो तो getUser() का उपयोग करें।
- क्लाइंट को कहीं और (एक कुकी, एक सर्वर) से एक सत्र सौंपने के लिए,
setSession(accessToken, refreshToken) का उपयोग करें। एक अमान्य जोड़ी को अस्वीकार कर दिया जाता है और पिछला सत्र रखा जाता है।
- सर्वर-साइड रेंडरिंग के लिए, Next.js ऐप राउटर और SSR देखें।
#खाता
3. प्रोफ़ाइल और पासवर्ड
profile.tstypescript
// मेटाडेटा: इसे `डेटा` में पास करें
await aura.auth.updateUser({ data: { theme: 'dark', plan: 'free' } })
// → user.user_metadata { प्लान: 'फ्री', थीम: 'डार्क' } है, और getUser() वही रिटर्न देता है
// ई-मेल बदलें: पता अभी नहीं बदला है
await aura.auth.updateUser({ email: 'new@example.com' })
// एक पुष्टिकरण लिंक नए पते पर जाता है। जब तक इसका उपयोग नहीं किया जाता, user.email पुराना मान रखता है।
// इसकी पुष्टि करें: aura.auth.verifyOtp({ प्रकार: 'ईमेल_चेंज', टोकन })
// पासवर्ड बदलें
await aura.auth.updatePassword('a-new-long-passphrase', 'a-long-passphrase')
पासवर्ड बदलने से आप साइन आउट हो जाते हैं
पासवर्ड बदलने पर सर्वर सभी सत्र रद्द कर देता है। updatePassword स्थानीय सत्र को साफ़ करता है और SIGNED_OUT उत्सर्जित करता है: नए पासवर्ड के साथ फिर से साइन इन करें। वास्तव में, कॉल के ठीक बाद getSession() खाली था, और नए पासवर्ड के साथ साइन इन करना काम कर गया।
पासवर्ड भूल गए: aura.auth.resetPasswordForEmail({ email }) रीसेट ई-मेल भेजता है। फिर उपयोगकर्ता इसे verifyOtp({ type: 'recovery', token, password }) के साथ पूरा करता है।
खाता हटाएं: aura.auth.deleteUser(password) वर्तमान पासवर्ड मांगता है, खाता हटा देता है और स्थानीय सत्र साफ़ कर देता है।
#वैकल्पिक
4. लिंक, कोड और OAuth
passwordless.tstypescript
// ई-मेल द्वारा जादुई लिंक
await aura.auth.signInWithMagicLink({ email })
// → {संदेश: "यदि ईमेल मौजूद है, तो दूत से संपर्क स्थापित करना आवश्यक है" }
// खाता मौजूद है या नहीं इसका उत्तर एक ही है: यह खातों को लीक नहीं करता है।
// एक बार के कोड
await aura.auth.signInWithEmailOtp(email)
await aura.auth.signInWithSmsOtp(phone)
await aura.auth.verifyOtp({ type: 'email', email, code }) // यह भी: 'एसएमएस', 'मैजिकलिंक', 'साइनअप', 'रिकवरी', 'ईमेल_चेंज'
// OAuth: प्रदाता पहला तर्क, एक स्ट्रिंग है
const { data } = await aura.auth.signInWithOAuth('google', { redirectTo: 'https://app.example.com/callback' })
window.location.href = data!.url
signInWithOAuth खोलने के लिए यूआरएल लौटाता है; यह स्वयं नेविगेट नहीं करता है. प्रदाता को प्रोजेक्ट में सक्षम और कॉन्फ़िगर किया जाना चाहिए, अन्यथा प्रारंभ URL उत्तर PROVIDER_NOT_CONFIGURED देता है।
सुपाबेस-जेएस फॉर्म नहीं
signInWithOAuth({ provider: 'google' }) त्रुटि invalid_provider लौटाता है। प्रदाता को पहले तर्क के रूप में पास करें।
रीडायरेक्ट बैक के बाद, क्लाइंट यूआरएल से सत्र को स्वयं पढ़ता है (detectSessionInUrl)। पीकेसीई प्रवाह के लिए, flowType: 'pkce' पास करें, डिफ़ॉल्ट लगातार स्टोर रखें, और क्लाइंट आपके लिए कोड का आदान-प्रदान करता है।
दूसरे प्रदाता को linkIdentity(provider) के साथ साइन-इन खाते से लिंक करें, उन्हें listIdentities() के साथ सूचीबद्ध करें और unlinkIdentity(identityId) के साथ एक को हटा दें।
#दूसरा कारक
5. बहु-कारक प्रमाणीकरण
mfa.tstypescript
// 1. नामांकन: otpauth_url से निर्मित QR कोड दिखाएं
const { data: enrol } = await aura.auth.mfaEnroll() // → {गुप्त, otpauth_url }
// 2. प्रमाणक ऐप से पहले कोड से पुष्टि करें: आपको पुनर्प्राप्ति कोड प्राप्त होते हैं
const { data: confirm } = await aura.auth.mfaVerifySetup(codeFromApp) // → {रिकवरी_कोड्स: [...] }
// 3. अब से, साइन इन करने पर सत्र के बजाय चुनौती आएगी
const login = await aura.auth.signInWithPassword({ email, password })
if (login.data && isMfaChallenge(login.data)) {
await aura.auth.mfaVerify({ mfa_token: login.data.mfa_token, code: codeFromApp })
}
mfaUnenroll(password) इसे बंद कर देता है, और regenerateRecoveryCodes(code) नए पुनर्प्राप्ति कोड जारी करता है। एक चुनौती MFA_CHALLENGE उत्सर्जित करती है और mfaVerify सफल होने तक कोई सत्र संग्रहीत नहीं किया जाता है।
devices.tstypescript
const { data } = await aura.auth.listSessions()
// [{आईडी, डिवाइस_इन्फो, आईपी_एड्रेस, क्रिएटेड_एट, एक्सपायर_एट, लास्ट_यूज्ड_एट, इज_करंट }, ...]
await aura.auth.revokeSession(sessionId) // एक डिवाइस से साइन आउट करें
await aura.auth.revokeAllSessions() // इस सहित हर जगह साइन आउट करें
await aura.auth.signOut() // केवल यह उपकरण
is_current आपके द्वारा उपयोग किए जा रहे सत्र को चिह्नित करता है। signOut सर्वर पर रीफ्रेश टोकन होने पर उसे रद्द कर देता है, स्थानीय सत्र को साफ़ करता है और SIGNED_OUT उत्सर्जित करता है।
#सर्वर
7. उपयोगकर्ताओं को प्रशासित करें
उपयोगकर्ता प्रशासन को service_role कुंजी की आवश्यकता है। यह केवल सर्वर पर उपलब्ध है: ब्राउज़र में aura.authAdmin पढ़ने से एक त्रुटि उत्पन्न होती है।
server/users.tstypescript
import { createAdminClient } from '@aurabase/aurabase-js'
const admin = createAdminClient(process.env.AURA_URL!, process.env.AURA_SERVICE_ROLE_KEY!)
const { data: users } = await admin.authAdmin.listUsers({ limit: 20, search: 'ada' })
const { data: created } = await admin.authAdmin.createUser({ email: 'bob@example.com', password: 'a-long-passphrase', email_verified: true })
await admin.authAdmin.banUser(created!.id)
await admin.authAdmin.unbanUser(created!.id)
const { data: link } = await admin.authAdmin.generateLink(created!.id, 'magic') // → {लिंक, टोकन }
await admin.authAdmin.deleteUser(created!.id)
const { data: stats } = await admin.authAdmin.getUserStats() // → {कुल, सत्यापित, प्रतिबंधित, mfa_enabled, new_7d }
generateLink 'magic', 'recovery' या 'invite' स्वीकार करता है। एडमिन क्लाइंट प्रोजेक्ट की ऑथ सेटिंग्स (getSettings, updateSettings), ई-मेल टेम्प्लेट, प्रत्येक उपयोगकर्ता के सत्र और ऑडिट लॉग (getAuditLog) को भी प्रबंधित करता है। प्रत्येक विधि प्रामाणिक संदर्भ में सूचीबद्ध है।