Particle Auth for Web Applications
Among all the SDKs for Particle Auth, the Web SDK (@particle-network/authkit
) is the most widely used. Thus, it offers extensive support and flexibility in driving onboarding through social logins, facilitating interaction with Particle’s Wallet-as-a-Service.
The Particle Auth SDK is the primary mechanism for configuring and using social logins. Whether you’re starting from scratch or already have an onboarding or authentication flow set up within your application, the Particle Auth Core Web SDK is a simple yet powerful integration.
Getting Started
Check out the Web Quickstart guide and get a new project up
and running in just 5 minutes.
@particle-network/authkit
to your project using either of the two following mechanisms:
Install
Configuration
Configuration is primarily handled by wrapping an application with Particle Auth’s master configuration component, essential for authenticating your project and customizing the optional embedded wallet modal. No matter which Particle Auth SDK you’re using, you must define yourprojectId
, clientKey
, and appId
within this configuration object to authenticate your Particle Auth instance properly. Additionally, you can apply customizations to the wallet modal for a tailored user experience.
Follow the quickstart tutorial to set up a project and find the required keys: Create a new
project.
index.tsx
file from a create-react-app
project. In this example, the AuthCoreContextProvider
component acts as the configuration wrapper for the entire application.
Learn how to customize the aesthetics of the login and embedded wallet interface in the Customizing Login
Modal and Customizing Wallet
Modal pages.
When using a framework that supports React Server Components, you must include the
"use client"
directive
at the beginning of the file.Interaction with Web3
Now that you’ve configured an instance of Particle Auth, it’s time to leverage Particle to facilitate social logins and interactions with Web3. To begin, you’ll need to choose between the following interaction mechanisms:- Ethers.js.
- viem.
- Particle native.
AuthCoreContextProvider
or ParticleNetwork
.
Initiating Social Login
To interact with a user’s account (wallet), they must first log in using Particle Auth or Particle Connect, similar to how one would enter a password and unlock MetaMask.Before interactions can occur, the application must either recognize that the user is already logged in or prompt them to complete the login process.
connect
and connected
functions from the useConnect()
hook to handle the connection logic:
handleLogin
function initiates the login process by displaying the login modal if the connected
status is false
, indicating that the user is not currently logged in.
Customize the Login Experience
You can set specific configurations within theconnect()
function to further tailor the login experience beyond frontend customizations.
The following example showcases all available configuration options:
TypeScript
web3.eth.getAccounts
will also initiate login automatically if a user isn’t already logged in.Log in with a Specific Social Platform
You can streamline the login process by bypassing the standard login modal and directing users to log in with a specific social platform. The following example shows how to automatically prompt users to log in with their Google account, skipping the login modal entirely:App.tsx
Customizing the Email Login Flow
By default, Particle Auth supports email login with an OTP (One Time Password) flow through the login modal. However, you can build a custom UI to request and validate OTPs directly, allowing for greater flexibility and control over the authentication experience.@particle-network/auth-core
is already included as a dependency in @particle-network/authkit
, so you don’t need to install it separately.getConnectCaptcha()
function from @particle-network/auth-core
to send an OTP to the user’s email.
page.tsx
connect()
function, including OTP and email within loginParams
, to verify it and complete the login.
page.tsx
Find a complete implementation in the Particle Auth Custom Email Login repository.
Login with JWT
You can use your existing user base or authentication method with Particle Auth through JWT. This way, your users can still log in with their current accounts.We only support RS256 now, Example.

TypeScript
Implementation within a Telegram Miniapp
Check out the Telegram Mini-App Quickstart guide and get a new project up
and running in just 5 minutes.
TypeScript
Verify User Login Status
TheuseConnect()
hook provides several functions to check the user’s connection status:
-
connected
— Returns a boolean value indicating whether the user is logged in (true
) or not (false
). This is useful for managing login logic. -
connectionStatus
— Returns a string representing the current stage of the user’s flow:loading
connecting
connected
disconnected
connectionStatus
to manage login logic or to display relevant status information in the UI.
page.tsx
Handling User Information
Once the user is logged in, theuserInfo
object from the useAuthCore()
hook becomes available.
The result of
connect()
will return the same object.name
and avatar
, or access security details such as has_set_master_password
.
This allows you to implement logic that prompts the user to set a master password if they haven’t already done so, thereby improving security.
Available Fields in `userInfo`
Available Fields in `userInfo`
- uuid: Unique identifier for the user.
- created_at: Timestamp of when the user account was created.
- updated_at: Timestamp of the last update to the user account.
- phone: User’s phone number (if available).
- email: User’s email address (if available).
- apple_email: Email associated with Apple ID (if available).
- apple_id: Apple ID (if available).
- avatar: URL to the user’s avatar image.
- discord_email: Email associated with Discord (if available).
- discord_id: Discord ID (if available).
- facebook_email: Email associated with Facebook (if available).
- facebook_id: Facebook ID (if available).
- github_email: Email associated with GitHub (if available).
- github_id: GitHub ID (if available).
- google_email: Email associated with Google.
- google_id: Google ID.
- jwt_id: JSON Web Token ID (if available).
- linkedin_email: Email associated with LinkedIn (if available).
- linkedin_id: LinkedIn ID (if available).
- microsoft_email: Email associated with Microsoft (if available).
- microsoft_id: Microsoft ID (if available).
- name: Full name of the user.
- passkeys_id: Passkeys ID (if available).
- security_account: Object containing security-related fields:
- has_set_master_password: Boolean indicating if a master password is set.
- has_set_payment_password: Boolean indicating if a payment password is set.
- payment_password_updated_at: Timestamp of the last update to the payment password.
- telegram_id: Telegram ID (if available).
- telegram_phone: Phone number associated with Telegram (if available).
- thirdparty_user_info: Object containing third-party authentication info:
- provider: Name of the third-party provider (e.g., “Google”).
- user_info: Object with detailed user information:
- email: Email used with the third-party provider.
- id: User ID associated with the third-party provider.
- name: Name associated with the third-party provider.
- picture: URL to the user’s profile picture from the third-party provider.
- token: Token used for authentication.
- twitch_email: Email associated with Twitch (if available).
- twitch_id: Twitch ID (if available).
- twitter_email: Email associated with Twitter (if available).
- twitter_id: Twitter ID (if available).
- wallets: Array of wallet objects:
- uuid: Unique identifier for the wallet.
- chain_name: Name of the blockchain associated with the wallet (e.g., “evm_chain”, “solana”).
userInfo
:
App.tsx
Retrieving the Public Address
To retrieve the public address linked to a user’s account, when it’s not already obtained through the login viauserInfo
, you can use the following method:
Sending Transactions
Sending transactions using Particle as the Signer/underlying wallet is also quite simple. If you’re using Ethers.js, you’re already set —as long as a user has logged in with Particle, transactions can be sent as you would with any other wallet. When a given transaction is sent, and a signature is needed for authentication, a standard confirmation popup (also customizable through the Particle dashboard) will appear directly within the application. Transactions can be sent through the following:To the end-user, sending transactions, regardless of the chosen method, looks like this (depending on customization outlined in the Particle dashboard).


Data Signing
In cases where you’d like to sign either a raw string (personal) or typed data (eth_signTypedData
), the process is quite straightforward.
You can accomplish this using standard libraries like Ethers or leveraging Particle’s native functionality. The examples below illustrate both approaches.
For instance, when sending transactions, the signatures are automatically formatted and presented to the user in a popup request. This ensures a user-friendly experience by displaying the relevant data in UTF-8 format.
Personal Signatures
Sign Typed Data
Enabling Blind Signatures
To enable blind signatures (signing without a confirmation popup) in Particle Auth, certain conditions must be met when configuring theAuthCoreContextProvider
component and setting up the authentication flow.
Blind signing is only supported when the user is authenticated via JWT or Telegram.
-
Master Password Requirement
- Users must either:
- Have entered the master password, or
- Not have set a master password in the first place.
- Users must either:
-
No Payment Password
- Users should not have set a payment password (as this interrupts the signing process).
-
Disable Payment Password Prompt Setting
- Set the
promptPaymentPasswordSettingWhenSign
parameter tofalse
withinAuthCoreContextProvider
.
- Set the
Particle Native Hooks
Below is a collection of examples describing the different hooks available with Particle Auth. These hooks facilitate social login and native application-level interaction (such as message signing, sending transactions, etc.) directly through Particle Auth.useConnect
useConnect
acts as the primary hook for facilitating login (connection) with Particle Auth.
TypeScript
useEthereum
useEthereum
provides direct interaction with a given EVM chain as an alternative to a traditional library such as ethers.
TypeScript
useSolana
useSolana
is one of the primary ways to use Solana with Particle Auth if you aren’t using an external connection modal such as wallet-adapter
.
TypeScript
useAuthCore
useAuthCore
provides additional functionality, such as retrieving userInfo
after login, forcing different account menus to open, accessing the on-ramp page, and more.
TypeScript
useCustomize
useCustomize
provides several methods for customizing the wallet modal, such as changing the theme type (light or dark), creating a custom style, changing the language, and more.
TypeScript
External Connection Kits
Integrating and leveraging Particle Auth isn’t limited to interfaces provided by Particle Network; instead, it’s built to fit into nearly every implementation scenario. Whether you’re using RainbowKit, Web3Modal, or Solana’swallet-adapter
or would like to have a standalone social login button within your application, Particle Auth can be used.