controller-signers

安装量: 56
排名: #13212

安装

npx skills add https://github.com/cartridge-gg/docs --skill controller-signers
Controller Signers & Authentication
Controller supports multiple authentication methods (signers) for flexibility and security.
Supported Signer Types
Type
Description
Best For
webauthn
Passkey (biometric/hardware key)
Primary auth, most secure
google
Google OAuth
Easy onboarding
discord
Discord OAuth
Gaming communities
twitter
Twitter/X OAuth
Social integration
argent
Argent wallet (Starknet)
Starknet native users
braavos
Braavos wallet (Starknet)
Starknet native users
metamask
MetaMask (desktop only)
EVM users
phantom-evm
Phantom EVM mode (desktop only)
Multi-chain users
rabby
Rabby wallet (desktop only)
Security-focused users
walletconnect
WalletConnect (desktop only)
Cross-device
password
Email/password
Testing only
Warning
Password authentication is non-recoverable. If users lose their password, they permanently lose account access. Do not use in production.
Configuring Auth Options
const
controller
=
new
Controller
(
{
signupOptions
:
[
"webauthn"
,
// Passkeys
"google"
,
// Google OAuth
"discord"
,
// Discord OAuth
"twitter"
,
// Twitter/X OAuth
"argent"
,
// Argent wallet
"braavos"
,
// Braavos wallet
"metamask"
,
// MetaMask (desktop)
"phantom-evm"
,
// Phantom (desktop)
"rabby"
,
// Rabby (desktop)
"walletconnect"
,
// WalletConnect (desktop)
]
,
}
)
;
Order reflects UI order. With one option, branded buttons appear.
Dynamic Authentication
Override auth options per connection:
// Default options
const
controller
=
new
Controller
(
{
signupOptions
:
[
"webauthn"
,
"google"
,
"discord"
]
,
}
)
;
// Branded Phantom flow
await
controller
.
connect
(
[
"phantom-evm"
]
)
;
// Branded Google flow
await
controller
.
connect
(
[
"google"
]
)
;
Branded Buttons
Single signer config shows branded styling:
// Shows "sign up with Phantom" button with Phantom branding
const
controller
=
new
Controller
(
{
signupOptions
:
[
"phantom-evm"
]
,
}
)
;
Passkey Authentication
Platform support: iOS (Face ID/Touch ID), Android, Windows Hello, password managers (Bitwarden, 1Password).
Passkeys are backed up via:
Apple: iCloud Keychain
Android: Google account
Windows: Windows account
Social Login
Uses Auth0 + Turnkey wallet infrastructure:
Popup OAuth flow (fallback to redirect if blocked)
OIDC token validation with nonce
Turnkey wallet creation linked to social account
Native app limitation
OAuth may not work in webviews. Use passkeys for native apps.
External Wallets
Starknet Wallets
Argent
Advanced security features, account management
Braavos
Built-in security features
EVM Wallets (Desktop Only)
MetaMask
Popular browser extension
Rabby
Security-focused multi-chain
Phantom
Multi-chain with EVM support
Cross-Platform
WalletConnect
QR code or deep link connection
Note
EVM wallets are automatically hidden on mobile browsers.
Chain Switching
const
success
=
await
controller
.
externalSwitchChain
(
"metamask"
,
// wallet type
chainId
// target chain (hex)
)
;
Braavos does not support chain switching.
Transaction Confirmation
const
response
=
await
controller
.
externalWaitForTransaction
(
"metamask"
,
txHash
,
30000
// timeout ms
)
;
if
(
response
.
success
)
{
console
.
log
(
"Receipt:"
,
response
.
result
)
;
}
else
{
console
.
error
(
"Error:"
,
response
.
error
)
;
}
Multi-Signer Management
Add backup signers via Settings > Signer(s) > Add Signer (Mainnet only).
To remove a signer:
Navigate to Settings > Signer(s)
Find the signer to remove
Click Remove option
Best practices:
Add 2-3 different signer types for recovery
Test each auth method periodically
Remove compromised signers promptly
Account Synchronization
Argent and Braavos wallets auto-sync when user switches accounts in wallet.
Controller registers
accountsChanged
listener and updates state automatically.
Note
Account synchronization is currently only available for Starknet wallets (Argent and Braavos). Other external wallets maintain existing connection behavior. Platform-Specific Configuration const isMobile = / iPhone | iPad | iPod | Android / i . test ( navigator . userAgent ) ; const authOptions = isMobile ? [ "webauthn" , "google" , "discord" , "argent" , "braavos" ] : [ "webauthn" , "google" , "discord" , "argent" , "braavos" , "metamask" , "walletconnect" ] ; await controller . connect ( authOptions ) ;
返回排行榜