ChinqIT VerifyChinqIT Verify

Firebase : connexion par téléphone avec ChinqIT

Connectez vos utilisateurs Firebase avec un code SMS envoyé par ChinqIT.

Avec un petit serveur, ChinqIT envoie et vérifie le code, puis Firebase connecte l'utilisateur.

Comment ça marche

  1. L'application envoie le numéro à votre serveur, qui demande un code à ChinqIT (POST /api/v2/code).
  2. L'utilisateur reçoit le SMS et saisit le code dans l'application.
  3. Votre serveur vérifie le code avec ChinqIT (POST /api/v2/check).
  4. Si le code est bon, le serveur renvoie un jeton Firebase et l'application connecte l'utilisateur.

Serveur

Installez express et firebase-admin, puis définissez CHINQIT_API_KEY dans l'environnement du serveur.

Envoyez le numéro au format +222XXXXXXXX.

import express from 'express'
import admin from 'firebase-admin'

admin.initializeApp()
const app = express()
app.use(express.json())

const API = 'https://sms.chinqit.com/api/v2'
const call = (path, body) =>
  fetch(`${API}/${path}`, {
    method: 'POST',
    headers: { 'X-API-Key': process.env.CHINQIT_API_KEY, 'Content-Type': 'application/json' },
    body: JSON.stringify(body),
  })

app.post('/login/send-code', async (req, res) => {
  const r = await call('code', { phoneNumber: req.body.phoneNumber, channel: 'sms', language: 'fr' })
  res.status(r.status).json(await r.json())
})

app.post('/login/verify', async (req, res) => {
  const { phoneNumber, otp } = req.body
  const r = await call('check', { phoneNumber, otp, channel: 'sms' })
  const result = await r.json()
  if (!r.ok || !result.verified) return res.status(r.status).json(result)

  let user
  try {
    user = await admin.auth().getUserByPhoneNumber(phoneNumber)
  } catch (e) {
    if (e.code !== 'auth/user-not-found') throw e
    user = await admin.auth().createUser({ phoneNumber })
  }
  res.json({ token: await admin.auth().createCustomToken(user.uid) })
})

app.listen(3000)

Application (JavaScript)

import { getAuth, signInWithCustomToken } from 'firebase/auth'

const { token } = await fetch('/login/verify', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ phoneNumber: '+22238089336', otp: '123456' }),
}).then((r) => r.json())

await signInWithCustomToken(getAuth(), token)

Application (Flutter)

await FirebaseAuth.instance.signInWithCustomToken(token);

Android

Pour remplir le code automatiquement, voir le Guide SMS Retriever.

On this page