React Native Cookies - A Cookie Manager for React Native
Cookie Manager for React Native
This module was ported from joeferraro/react-native-cookies. This would not exist without the work of the original author, Joe Ferraro.
Important notices & Breaking Changes
- v6.0.0: Package name updated to
@react-native-cookies/cookies
.
- v5.0.0: Peer Dependency of >= React Native 0.60.2
- v4.0.0: Android SDK version bumpted to 21
- v3.0.0: Remove React Native Core dependencies, CookieManager.set() support for Android
- v2.0.0: Package name updated to
@react-native-community/cookies
.
Maintainers
Platforms Supported
- ✅ iOS
- ✅ Android
- ❌ Currently lacking support for Windows, macOS, and web. Support for these platforms will be created when there is a need for them. Starts with a posted issue.
Expo
Installation
yarn add @react-native-cookies/cookies
Then link the native iOS package
npx pod-install
Usage
A cookie object can have one of the following fields:
export interface Cookie {
name: string;
value: string;
path?: string;
domain?: string;
version?: string;
expires?: string;
secure?: boolean;
httpOnly?: boolean;
}
export interface Cookies {
[key: string]: Cookie;
}
import CookieManager from '@react-native-cookies/cookies';
CookieManager.set('http://example.com', {
name: 'myCookie',
value: 'myValue',
domain: 'some domain',
path: '/',
version: '1',
expires: '2015-05-30T12:30:00.00-05:00'
}).then((done) => {
console.log('CookieManager.set =>', done);
});
*NB:* When no `domain` is specified, url host will be used instead.
*NB:* When no `path` is specified, an empty path `/` will be assumed.
CookieManager.setFromResponse(
'http://example.com',
'user_session=abcdefg; path=/; expires=Thu, 1 Jan 2030 00:00:00 -0000; secure; HttpOnly')
.then((success) => {
console.log('CookieManager.setFromResponse =>', success);
});
CookieManager.get('http://example.com')
.then((cookies) => {
console.log('CookieManager.get =>', cookies);
});
CookieManager.getAll()
.then((cookies) => {
console.log('CookieManager.getAll =>', cookies);
});
CookieManager.clearAll()
.then((success) => {
console.log('CookieManager.clearAll =>', success);
});
CookieManager.clearByName('http://example.com', 'cookie_name')
.then((success) => {
console.log('CookieManager.clearByName =>', success);
});
CookieManager.flush()
.then((success) => {
console.log('CookieManager.flush =>', success);
});
CookieManager.removeSessionCookies()
.then((sessionCookiesRemoved) => {
console.log('CookieManager.removeSessionCookies =>', sessionCookiesRemoved);
});
WebKit-Support (iOS only)
React Native comes with a WebView component, which uses UIWebView on iOS. Introduced in iOS 8 Apple implemented the WebKit-Support with all the performance boost.
Prior to WebKit-Support, cookies would have been stored in NSHTTPCookieStorage
and sharedCookiesEnabled must be set on webviews to ensure access to them.
With WebKit-Support, cookies are stored in a separate webview store WKHTTPCookieStore
and not necessarily shared with other http requests. Caveat is that this store is available upon mounting the component but not necessarily prior so any attempts to set a cookie too early may result in a false positive.
To use WebKit-Support, you should be able to simply make advantage of the react-native-webview as is OR alternatively use the webview component like react-native-wkwebview.
To use this CookieManager with WebKit-Support we extended the interface with the attribute useWebKit
(a boolean value, default: FALSE
) for the following methods:
getAll | Yes | CookieManager.getAll(useWebKit:boolean) |
clearAll | Yes | CookieManager.clearAll(useWebKit:boolean) |
clearByName | Yes | CookieManager.clearByName(url:string, name: string, useWebKit:boolean) |
get | Yes | CookieManager.get(url:string, useWebKit:boolean) |
set | Yes | CookieManager.set(url:string, cookie:object, useWebKit:boolean) |
Usage
import CookieManager from '@react-native-cookies/cookies';
const useWebKit = true;
CookieManager.getAll(useWebKit)
.then((cookies) => {
console.log('CookieManager.getAll from webkit-view =>', cookies);
});
CookieManager.clearAll(useWebKit)
.then((succcess) => {
console.log('CookieManager.clearAll from webkit-view =>', succcess);
});
CookieManager.clearByName('http://example.com', 'cookie name', useWebKit)
.then((succcess) => {
console.log('CookieManager.clearByName from webkit-view =>', succcess);
});
CookieManager.get('http://example.com', useWebKit)
.then((cookies) => {
console.log('CookieManager.get from webkit-view =>', cookies);
});
const newCookie: = {
name: 'myCookie',
value: 'myValue',
domain: 'some domain',
path: '/',
version: '1',
expires: '2015-05-30T12:30:00.00-05:00'
};
CookieManager.set('http://example.com', newCookie, useWebKit)
.then((res) => {
console.log('CookieManager.set from webkit-view =>', res);
});