pauth.me × Express — 着信認証API実装ガイド
Node.js/ExpressプロジェクトにpAuth着信認証APIを組み込む手順を解説します。 軽量なミドルウェア構成でAPIサーバーに着信認証を追加できます。
※本ページのコード例は説明目的の擬似コードです。実際の実装では環境に合わせた調整が必要です。
前提条件
- Node.js 18以上 / Express 4以上
- pauth.me APIキー(無料登録で取得)
npm install express axios dotenv express-session
Step 1: 環境変数の設定
# .env
PAUTH_API_KEY=your_api_key_here
PAUTH_BASE_URL=https://api.pauth.me
SESSION_SECRET=your_session_secret
Step 2: 認証セッションの開始
// routes/auth.js
const express = require('express')
const axios = require('axios')
require('dotenv').config()
const router = express.Router()
router.post('/start', async (req, res) => {
try {
const { phoneNumber } = req.body
const response = await axios.post(
`${process.env.PAUTH_BASE_URL}/v1/auth/sessions`,
{
phone_number: phoneNumber,
callback_url: `${req.protocol}://${req.get('host')}/auth/callback`,
},
{
headers: { Authorization: `Bearer ${process.env.PAUTH_API_KEY}` }
}
)
req.session.pauthSessionId = response.data.id
res.json({
sessionId: response.data.id,
callNumber: response.data.call_number,
})
} catch (error) {
res.status(500).json({ error: '認証の開始に失敗しました' })
}
})
Step 3: 認証状態の確認
router.get('/status', async (req, res) => {
const sessionId = req.session.pauthSessionId
if (!sessionId) return res.status(400).json({ error: 'Session not found' })
const response = await axios.get(
`${process.env.PAUTH_BASE_URL}/v1/auth/sessions/${sessionId}`,
{ headers: { Authorization: `Bearer ${process.env.PAUTH_API_KEY}` } }
)
const { status, phone_number } = response.data
if (status === 'verified') {
req.session.userId = await getUserByPhone(phone_number)
}
res.json({ status })
})
エラーハンドリング
// axios エラーインターセプター
axios.interceptors.response.use(
response => response,
error => {
if (error.response?.status === 401) {
console.error('pAuth: Invalid API key')
} else if (error.response?.status === 429) {
console.error('pAuth: Rate limit exceeded')
}
return Promise.reject(error)
}
)
// セッション期限切れ
if (response.data.status === 'expired') {
delete req.session.pauthSessionId
return res.status(408).json({ status: 'expired' })
}
本番環境の注意点
- APIキーは必ず
.envで管理し、Gitにコミットしない(.gitignoreに追加) - セッションストアはRedis(
connect-redis)を使用することを推奨 - HTTPS必須: HTTP環境では
cookie.secure: trueが機能しないため必ずHTTPS化する - Rate limiting:
express-rate-limitで認証エンドポイントを保護する