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
- L'application envoie le numéro à votre serveur, qui demande un code à ChinqIT (
POST /api/v2/code). - L'utilisateur reçoit le SMS et saisit le code dans l'application.
- Votre serveur vérifie le code avec ChinqIT (
POST /api/v2/check). - 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.