
Security News
/Research
Popular node-ipc npm Package Infected with Credential Stealer
Socket detected malicious node-ipc versions with obfuscated stealer/backdoor behavior in a developing npm supply chain attack.
@cryptr/cryptr-react-native
Advanced tools
React Native SDK for Cryptr Authentication through SSO
:warning: Follow below steps to use our SDK with Expo
npm i @cryptr/cryptr-react-native
// Expo link
(npx) expo install @cryptr/cryptr-react-native
insertCryptrStrategyPlugin.js with below codeconst { withAppBuildGradle } = require('@expo/config-plugins');
module.exports = function withAndroidStrategiesPlugin(config) {
return withAppBuildGradle(config, (config) => {
const targetSdkVersionLine = "targetSdkVersion rootProject.ext.targetSdkVersion";
const manifestPlaceholders = 'manifestPlaceholders = [cryptrDomain: "your-app-domain", cryptrScheme: "cryptr"]';
// Check if the manifestPlaceholders already exist
if (!config.modResults.contents.includes(manifestPlaceholders)) {
config.modResults.contents = config.modResults.contents.replace(
targetSdkVersionLine,
`${targetSdkVersionLine}\n ${manifestPlaceholders}`
);
}
return config;
});
};
Update your app.json file to add the above file as plugin
// ./app.json
{
"expo" : {
//...
"plugins": [
//...
"./insertCryptrStrategyPlugin"
]
}
}
(npx) expo prebuild
Support with minSdkVersion=23
Full support with iOS>=13.0
Through your API or on your dashboard create a react-native application with the following attributes:
| Attribute Name | Value |
|---|---|
| Name | Desired name for your App |
| Application type | mobile |
| Allowed Redirect URI | cryptr://your-tenant |
⚠️ Choose wisely your domain to avoid conflicts with other apps.
When the application is registered, the configuration will be displayed, keep it for implementation.
# Yarn
yarn add @cryptr/cryptr-react-native
# NPM
npm install @cryptr/cryptr-react-native
Check your minSdkVersion
In android/build.gradle check that the version is 23 or greater
//android/build.gradle
minSdkVersion = 23
Update your manifestPlaceholders
In android/app/build.gradle setup as below. If manifestPlaceholders is not present add it with proper values.
android {
//...
defaultConfig {
//...
manifestPlaceholders = [cryptrDomain: "your-account-domain", cryptrScheme: "cryptr"]
}
}
The cryptrDomain should have the same value in the allowed redirect URI for this app on Cryptr.
You are now good to go.
Cryptr implementation is based on React Context and Provider. At the top level of your React Native App set the configuration you got on the first step, like this one:
const config: CryptrConfig = {
accountDomain: 'your-account-domain',
clientId: 'CLIENT_ID',
audience: 'cryptr://your-account-domain',
defaultRedirectUri: 'cryptr://your-account-domain',
cryptrServiceUrl: 'YOUR_SERVER_URL',
dedicated_server: true, // if you have a dedicated Cryptr service
};
Then you can use it into <CryptrProvider {...config}>
Example: Inside this Provider, you can handle Cryptr Authentication using our Hooks and/or components.
If you want to avoid the display of the below Alert dialog on iOS. you can add no_popup_no_cookie: true to your config.

:warning: With this configuration, even the default browser has registered credentials, the user will have to type them each type.
access to our hooks like this
import { useCryptr } from `@cryptr/cryptr-react-native`
// ...
const { /* Any required hook */ } = useCryptr()
Hook to know if a Cryptr session is active
The return type is a boolean
const { isAuthenticated } = useCryptr()
if(isAuthenticated) { /**/ }
Hook to retrieve the User information (extracted from current oAuth Cryptr active session ID Token)
The return type is a key/value pair Object.
const { user } = useCryptr()
// ...
user?.email
Hook to retrieve the current accessToken value
The return type is a ** nullable string**.
const { accessToken } = useCryptr()
//..
{accessToken && <Text>{accessToken}</Text>}
Hook to retrieve the current idToken value
The return type is a string.
const { idToken } = useCryptr()
//...
{idToken && <Text>{idToken}</Text>}
Actions
Hook action to sign in the user using his organization's domain.
const { signInWithDomain } = useCryptr();
// Signature
signInWithDomain(domain: string, successCallback? (data: any) => any, errorCallback?: (data: any) => any)
// Sign in for domain `company-dot-io`
signInWithDomain('company-dot-io')
Hook action to sign in the user using his business email. Requires email value.
const { signInWithEmail } = useCryptr();
// Signature
signInWithEmail(email: string, successCallback? (data: any) => any, errorCallback?: (data: any) => any)
// Sign in for email `john@company.io`
signInWithEmail('john@company.io')
Hook action to refresh tokens to new ones.
const { refreshTokens } = useCryptr()
// Signature
refreshTokens(successCallback?: (data: any) => any, errorCallback?: (data: any) => any)
Hook action to log out the user.
const { logOut } = useCryptr()
// Signature
logOut(successCallback?: (data: any) => any, errorCallback?: (data: any) => any)
--
Hook to know if a Cryptr error occured
The return type is a String
const { error } = useCryptr()
Hook to inform you that a Cryptr process is in progress.
The return type is a boolean
const { isLoading } = useCryptr()
Hook action to sign in the user using his organization's domain.
const { signIn } = useCryptr();
// Signature
signIn(successCallback? (data: any) => any, errorCallback?: (data: any) => any)
// Sign in for domain `company-dot-io`
signIn()
This SDK also includes Components to simplify your integration.
CryptrGatewayButton to log in either with domain or email (hides when session is already active [autoHide={false} to disable])SignInButton to log in either when not knowing neither email or domain, the user will be asked to fill a form (hides when session is already active [autoHide={false} to disable])LogOutButton to logout user (hides when no session is active [autoHide={false} to disable])RefreshButton to get new tokens (hides when session is already active [autoHide={false} to disable])Configuration change
| old key | new key |
|---|---|
| tenant_domain | accountDomain |
| client_id | clientId |
| default_redirect_uri | defaultRedirectUri |
| cryptr_base_url | cryptrServiceUrl |
| dedicated_server | dedicatedServer |
Components/hooks
If you either used signInWithDomain() hook or <CryptrGatewayButton/> component without domain parameter, please use now signIn or <SignInButton/> accordingly
For easier usage of user hook this one changed from function () => User | undefined, now it's directly a User | undefined
FAQs
React Native SDK for Cryptr Authentication
The npm package @cryptr/cryptr-react-native receives a total of 23 weekly downloads. As such, @cryptr/cryptr-react-native popularity was classified as not popular.
We found that @cryptr/cryptr-react-native demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
/Research
Socket detected malicious node-ipc versions with obfuscated stealer/backdoor behavior in a developing npm supply chain attack.

Security News
TeamPCP and BreachForums are promoting a Shai-Hulud supply chain attack contest with a $1,000 prize for the biggest package compromise.

Security News
Packagist urges PHP projects to update Composer after a GitHub token format change exposed some GitHub Actions tokens in CI logs.