PHPackages                             up2dev/user-totp - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Authentication &amp; Authorization](/categories/authentication)
4. /
5. up2dev/user-totp

ActiveLibrary[Authentication &amp; Authorization](/categories/authentication)

up2dev/user-totp
================

Ajoute un TOTP (2FA) optionnel et par utilisateur au-dessus d'un système d'authentification existant, sans le modifier. Aucun service externe : tout le calcul TOTP est local (RFC 6238).

v0.1.2(1mo ago)02MITPHPPHP ^8.2

Since Jul 8Pushed 1mo agoCompare

[ Source](https://github.com/up2dev/user-totp)[ Packagist](https://packagist.org/packages/up2dev/user-totp)[ RSS](/packages/up2dev-user-totp/feed)WikiDiscussions master Synced 1w ago

READMEChangelogDependencies (8)Versions (3)Used By (0)

up2dev/user-totp
================

[](#up2devuser-totp)

Double authentification **multi-méthodes** (TOTP + code OTP par email pour l'instant, extensible), optionnelle et **par utilisateur**, à greffer sur un système d'authentification Laravel existant **sans le modifier**.

Aucun service tiers : le TOTP est calculé localement ([RFC 6238](https://datatracker.ietf.org/doc/html/rfc6238), compatible Google Authenticator, Authy, Duo, Microsoft Authenticator, FreeOTP, Bitwarden, 1Password, Aegis...) ; l'OTP par email utilise le mailer déjà configuré de votre application (aucun gateway SMS/email payant).

Pourquoi ce package
-------------------

[](#pourquoi-ce-package)

La plupart des libs 2FA pour Laravel possèdent tout le cycle d'authentification (login inclus) et n'imposent qu'une seule méthode. `up2dev/user-totp` part de deux principes inverses : votre système d'auth existant reste maître du login, et chaque utilisateur choisit sa méthode selon son contexte — une app d'authentification s'il en a une sur l'appareil approprié, un code par email sinon (utile typiquement pour dissocier téléphone pro/perso).

Le package fournit :

- une table dédiée (`user_two_factor_methods`), indépendante de votre table `users`
- `TotpService` (génération/vérification TOTP) et `EmailOtpService` (génération/ envoi/vérification d'un code par email)
- `TwoFactorManager`, point d'entrée unique pour le login : liste les méthodes actives d'un utilisateur et vérifie un code sans que votre code ait besoin de savoir laquelle c'est
- un mécanisme de "token en attente" entre le mot de passe et le 2FA, qui n'est **pas** un token de session et ne peut donc pas accéder au reste de l'API
- des routes HTTP autonomes : `{method}/setup`, `{method}/enable`, `{method}/disable`, `methods`, `enroll/{method}/setup`, `enroll/{method}/enable`, `challenge`
- un mode "obligatoire" optionnel (`USER_TOTP_ENFORCED`), avec exemption par rôle déléguée à l'application hôte

**Ce qu'il ne fait pas** : émettre le token final après un login réussi — reste dans *votre* code, le format dépendant entièrement de votre projet.

Prérequis
---------

[](#prérequis)

- PHP ^8.2
- Laravel 11 ou 12 (`illuminate/support`, `illuminate/database`, `illuminate/mail`)
- Un mailer fonctionnel si vous activez la méthode `email`

Testé et documenté en intégration avec [`lume-pack/foundation`](https://packagist.org/packages/lume-pack/foundation)(stack Sanctum + middleware d'auth custom), mais ne dépend d'aucun package LumePack — voir `Contracts\ResponseFormatter` et `Contracts\ExemptionResolver`pour adapter à n'importe quelle stack.

Installation
------------

[](#installation)

### Depuis Packagist (recommandé)

[](#depuis-packagist-recommandé)

```
composer require up2dev/user-totp
```

Aucun bloc `repositories` nécessaire — le package est public sur [packagist.org/packages/up2dev/user-totp](https://packagist.org/packages/up2dev/user-totp).

### Depuis un repository Git directement (sans passer par Packagist)

[](#depuis-un-repository-git-directement-sans-passer-par-packagist)

```
"repositories": [
    { "type": "vcs", "url": "https://github.com/up2dev/user-totp.git" }
],
"require": {
    "up2dev/user-totp": "^0.1"
}
```

### En développement local (symlink)

[](#en-développement-local-symlink)

```
"repositories": [
    { "type": "path", "url": "../up2dev-user-totp" }
],
"require": {
    "up2dev/user-totp": "dev-main"
}
```

Puis, dans les deux cas :

```
composer require up2dev/user-totp
php artisan migrate
```

Configuration rapide
--------------------

[](#configuration-rapide)

```
USER_TOTP_ISSUER="Mon App"
USER_TOTP_ENABLED_METHODS=totp,email
USER_TOTP_ROUTE_PREFIX=totp
USER_TOTP_MIDDLEWARE=auth:sanctum
```

Voir `config/user-totp.php` pour toutes les options.

Guide d'intégration complet
---------------------------

[](#guide-dintégration-complet)

Voir [`INTEGRATION.md`](./INTEGRATION.md) pour la liste exhaustive des fichiers à créer/modifier, le flux multi-méthodes, le mode obligatoire, et les pièges connus.

Référence des routes
--------------------

[](#référence-des-routes)

Voir [`ROUTES.md`](./ROUTES.md) : chaque route, ce qu'elle fait, qui peut l'appeler, exemples de body/réponse, et les flux complets (login simple, choix entre deux méthodes, enrôlement forcé).

Licence
-------

[](#licence)

MIT

###  Health Score

35

—

LowBetter than 77% of packages

Maintenance91

Actively maintained with recent releases

Popularity2

Limited adoption so far

Community2

Small or concentrated contributor base

Maturity37

Early-stage or recently created project

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~4 days

Total

2

Last Release

44d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/45680703c512f63ffb8f7b283d817b5d0b550266feb3457ee0b4788ad02ae40f?d=identicon)[franz\_vetter](/maintainers/franz_vetter)

### Embed Badge

![Health badge](/badges/up2dev-user-totp/health.svg)

```
[![Health](https://phpackages.com/badges/up2dev-user-totp/health.svg)](https://phpackages.com/packages/up2dev-user-totp)
```

###  Alternatives

[craftcms/cms

Craft CMS

3.6k3.7M3.5k](/packages/craftcms-cms)[psalm/plugin-laravel

Psalm plugin for Laravel

3345.4M354](/packages/psalm-plugin-laravel)[mike-bronner/laravel-model-caching

Automatic caching for Eloquent models.

2.4k161.4k2](/packages/mike-bronner-laravel-model-caching)[api-platform/laravel

API Platform support for Laravel

58190.1k21](/packages/api-platform-laravel)[pressbooks/pressbooks

Pressbooks is an open source book publishing tool built on a WordPress multisite platform. Pressbooks outputs books in multiple formats, including PDF, EPUB, web, and a variety of XML flavours, using a theming/templating system, driven by CSS.

45844.8k1](/packages/pressbooks-pressbooks)[masterix21/laravel-licensing

Laravel licensing package with polymorphic assignment to any model, activation keys, expirations/renewals, and seat control via LicenseUsage. Supports offline verification with public-key–signed tokens, a CLI to generate/rotate/revoke keys, and an extensible architecture via config and contracts.

1614.1k4](/packages/masterix21-laravel-licensing)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
