This project is not covered by Drupal’s security advisory policy.
Wallet Auth lets people and AI agents sign in to Drupal with a crypto wallet instead of an email and a password. The wallet is the identity: one account can hold several wallets, and an agent signs in exactly like a person does, in code.
It implements Sign-In With Ethereum (EIP-4361): the site hands out a one-time nonce, the wallet signs a standard message, and Drupal recovers the address and opens the account that holds it, or creates one.
Features
- Sign in with a wallet on the login form: MetaMask or any EIP-1193 browser wallet.
- Agents are first-class users: a small JSON API (
/wallet/nonce,/wallet/login) and a ready-made script (scripts/sign-in.mjs, with viem) let a bot or AI agent sign in with its key and get a normal Drupal session. - Several wallets per account: link more from the account's edit form, which lists them. A wallet belongs to one account only.
- One address, every EVM chain: Ethereum, Arc, Base, Polygon… share the same address.
- No email needed: new accounts are named by the address.
- Follows the site's registration setting: Administrators only creates no accounts, Visitors, but administrator approval is required creates them blocked.
Use cases
- Marketplaces and paywalls where buyers pay with a wallet and their purchases should attach to an account.
- APIs used by AI agents, where an email and password make no sense.
- Web3 communities that want sign-in without collecting personal data.
How it works
GET /wallet/noncereturns{nonce, domain, uri}. The nonce works once, for 5 minutes.- The wallet signs an EIP-4361 message built with them (
personal_sign). POST /wallet/loginwith{"message", "signature"}as JSON: Drupal recovers the signer and answers{uid, name, address}with the session
cookie.- Signed in,
POST /wallet/link(same body, plusX-CSRF-Tokenfrom/session/token) adds another wallet to the account.
Requests are refused with a 403 and the reason when the message names another site, the nonce is used or unknown, the message has expired, or the signature comes from another address.
Post-installation
Enable the module: the Sign in with a wallet button appears on the login form and Link a wallet on the user edit form. Review Configuration → People → Account
settings → Who can register accounts?, which decides whether a new wallet c
Agents: WALLET_KEY=0x… node scripts/sign-in.mjs https://your-site signs in and prints the account and the cookie to send from then on.
Additional requirements
- Drupal 11.1+ or 12, PHP 8.3+ with the
gmpextension. kornrunner/keccakandkornrunner/secp256k1, installed by Composer. Signature recovery runs in PHP; no external service is called.
Recommended modules
- x402 Pay: charge forin USDC over HTTP 402 (x402), paid by people or agents. With Wallet Auth,purchases and prices can attach to an account.
Similar projects
- SIWE Login also implemenWalletConnect and optional email verification. Wallet Auth focuses on AI agentsas users (JSON API and script), several wallets per account and email-free accounts.
Known limits
- EVM wallets with plain (EOA) signatures only. Smart-contract wallets (ERC-1271) and Solana are planned.
- Beta: routes and API may change before 1.0.0.
Background
Built for Ombú, an open-source marketplace on Drupal where AI agents sell to people and to other agents, paid in USDC on Arc. Development happens on GitHub; issues are welcome here on drupal.org.
Project information
- Project categories: Access control, E-commerce, User engagement
- Ecosystem: Blockchain
- Created by leofishman on , updated
This project is not covered by the security advisory policy.
Use at your own risk! It may have publicly disclosed vulnerabilities.
Releases
First beta: sign in to Drupal with a wallet (Sign-In With Ethereum), for people and AI agents, several wallets per account.
Development version: 1.0.x-dev updated 16 Oct 2026 at 12:23 UTC
