Skip to content
API beta кезеңінде және алдын ала ескертусіз өзгеруі мүмкін.

HitKey сәйкестік

HitKey пайдаланушыларды қалай анықтайтынын түсіну дұрыс интеграция үшін маңызды.

Негізгі қағида

HitKey = адам, email емес.

Адамның көптеген электрондық пошта мекенжайлары болуы мүмкін. Email-дер өзгереді — адамдар провайдерлерді ауыстырады, компаниялар домендерді өзгертеді, пайдаланушылар жеке және жұмыс email-дерін қосады. Бірақ адам сол күйінде қалады.

sub — Тұрақты идентификатор

/oauth/userinfo шақырғанда жауапта sub claim бар:

json
{
  "sub": "550e8400-e29b-41d4-a716-446655440000",
  "email": "user@example.com"
}

sub өрісі:

  • UUID — әмбебап бірегей, ешқашан қайта пайдаланылмайды
  • Өзгермейтін — берілген пайдаланушы үшін ешқашан өзгермейді
  • Сыртқы кілт ретінде сақтауыңыз керек жалғыз идентификатор

Email-ді ешқашан негізгі кілт ретінде пайдаланбаңыз

HitKey-дегі email-дер:

  • Өзгермелі — пайдаланушылар кез келген уақытта әдепкі email-ді өзгерте алады
  • Көптік — бір пайдаланушыда 5, 10 немесе одан да көп верификацияланған email болуы мүмкін
  • Кэштелген — userinfo-дағы email өрісі ағымдағы әдепкіні көрсетеді, ол өзгеруі мүмкін

Егер email-ді пайдаланушы идентификаторы ретінде пайдалансаңыз, пайдаланушы email-ін өзгерткенде қайталанатын аккаунттар жасайсыз.

Дұрыс интеграция үлгісі

Деректер қорыңыздың схемасы

sql
CREATE TABLE users (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  hitkey_user_id UUID NOT NULL UNIQUE, -- /oauth/userinfo-дан алынған sub
  email TEXT,                           -- кэштелген, әр кіруде жаңартылады
  display_name TEXT,
  created_at TIMESTAMPTZ DEFAULT NOW()
);

Әр OAuth кіруде

javascript
const userinfo = await fetch('https://api.hitkey.io/oauth/userinfo', {
  headers: { Authorization: `Bearer ${accessToken}` }
}).then(r => r.json())

// sub бойынша табу немесе жасау — ЕШҚАШАН email бойынша емес
let user = await db.users.findBy('hitkey_user_id', userinfo.sub)

if (!user) {
  user = await db.users.create({
    hitkey_user_id: userinfo.sub,
    email: userinfo.email,
    display_name: userinfo.display_name
  })
} else {
  // Әр кіруде кэштелген өрістерді жаңарту
  await user.update({
    email: userinfo.email,
    display_name: userinfo.display_name
  })
}

Жиі кеткен қате

javascript
// ҚАТЕ — email өзгерген кезде қайталанатын аккаунттар жасайды
let user = await db.users.findBy('email', userinfo.email)

Көп email қолдау

HitKey пайдаланушыларында бірнеше верификацияланған электрондық пошта мекенжайлары болуы мүмкін:

  • Әдепкі emailuserinfo.email-де қайтарылады
  • Қосымша email-дер — HitKey бақылау тақтасы арқылы басқарылады
  • Верификация — әр email тәуелсіз верификацияланады

Пайдаланушы әдепкі email-ін өзгерткенде, келесі /oauth/userinfo шақыруы жаңасын қайтарады. Сіздің қосымшаңыз кэштелген көшірмесін жаңартуы тиіс.

Ат құрылымы

HitKey халықаралық ат форматтарын қолдайды:

ӨрісСипаттамаМысал
nameТолық пішімделген ат"John Doe"
given_nameЖеке/аты"John"
family_nameТегі"Doe"
display_nameПайдаланушының қалаған көрсетілетін аты"John"

Аттар пайдаланушының preferred_order параметрі арқылы батыс ("John Doe") және шығыс ("Doe John") конвенцияларына сәйкес құрылымдалуы мүмкін.

Қорытынды

ДұрысБұрыс
sub-ды сыртқы кілт ретінде пайдалануemail-ді бірегей кілт ретінде пайдалану
hitkey_user_id-ге UNIQUE шектеу қоюEmail тұрақты деп есептеу
Әр кіруде кэштелген email-ді жаңартуuserinfo шақыруын өткізіп жіберу
Қосымша өрістердің болмауын өңдеуБарлық ат өрістерін талап ету

HitKey Service License.