The AccessToken class represents an immutable access token for using Facebook services. It provides methods to retrieve, manage, and monitor access tokens.
Import
import { AccessToken } from 'react-native-fbsdk-next' ;
Static Methods
getCurrentAccessToken
Retrieves the current access token for the application.
static getCurrentAccessToken (): Promise < AccessToken | null >
Returns
Promise<AccessToken | null> - Resolves with an AccessToken instance if a user is logged in, or null if no user is logged in.
Example
import { AccessToken } from 'react-native-fbsdk-next' ;
async function checkLoginStatus () {
const token = await AccessToken . getCurrentAccessToken ();
if ( token ) {
console . log ( 'User is logged in' );
console . log ( 'Access Token:' , token . accessToken );
console . log ( 'User ID:' , token . userID );
console . log ( 'Permissions:' , token . permissions );
} else {
console . log ( 'No user logged in' );
}
}
setCurrentAccessToken
Sets the current access token for the application.
static setCurrentAccessToken ( accessToken : AccessTokenMap ): void
Parameters
Parameter Type Description accessTokenAccessTokenMapObject containing access token data
This method is for advanced use cases only. Most apps should not need to call this directly.
Example
import { AccessToken } from 'react-native-fbsdk-next' ;
// Advanced usage - typically not needed
AccessToken . setCurrentAccessToken ({
accessToken: 'token_string' ,
applicationID: 'your_app_id' ,
userID: 'user_id' ,
permissions: [ 'public_profile' , 'email' ],
declinedPermissions: [],
expiredPermissions: [],
expirationTime: Date . now () + 60 * 60 * 1000 , // 1 hour from now
lastRefreshTime: Date . now (),
dataAccessExpirationTime: Date . now () + 90 * 24 * 60 * 60 * 1000 , // 90 days
});
refreshCurrentAccessTokenAsync
Refreshes the current access token, extending expiration date if possible.
static refreshCurrentAccessTokenAsync (): Promise < AccessTokenMap >
Returns
Promise<AccessTokenMap> - Resolves with the refreshed access token data.
Example
import { AccessToken } from 'react-native-fbsdk-next' ;
async function refreshToken () {
try {
const refreshedToken = await AccessToken . refreshCurrentAccessTokenAsync ();
console . log ( 'Token refreshed successfully' );
console . log ( 'New expiration:' , new Date ( refreshedToken . expirationTime ));
} catch ( error ) {
console . error ( 'Failed to refresh token:' , error );
}
}
// Refresh token if it's about to expire
async function checkAndRefresh () {
const token = await AccessToken . getCurrentAccessToken ();
if ( token ) {
const hoursUntilExpiry = ( token . expirationTime - Date . now ()) / ( 1000 * 60 * 60 );
if ( hoursUntilExpiry < 24 ) {
console . log ( 'Token expiring soon, refreshing...' );
await AccessToken . refreshCurrentAccessTokenAsync ();
}
}
}
addListener
Adds a listener that is called when the access token changes.
static addListener (
listener : ( accessToken : AccessToken | null ) => void
): () => void
Parameters
Parameter Type Description listener(accessToken: AccessToken | null) => voidCallback function invoked when token changes
Returns
() => void - A function that removes the listener when called.
Example
import { AccessToken } from 'react-native-fbsdk-next' ;
import { useEffect } from 'react' ;
function MyComponent () {
useEffect (() => {
// Add listener
const removeListener = AccessToken . addListener (( token ) => {
if ( token ) {
console . log ( 'Access token updated:' , token . accessToken );
console . log ( 'User ID:' , token . userID );
} else {
console . log ( 'User logged out' );
}
});
// Cleanup: remove listener when component unmounts
return () => {
removeListener ();
};
}, []);
return null ;
}
// Using in a class component
class MyComponent extends React . Component {
componentDidMount () {
this . removeTokenListener = AccessToken . addListener ( this . handleTokenChange );
}
componentWillUnmount () {
if ( this . removeTokenListener ) {
this . removeTokenListener ();
}
}
handleTokenChange = ( token ) => {
if ( token ) {
console . log ( 'Token changed:' , token . accessToken );
}
};
render () {
return null ;
}
}
Instance Properties
accessToken
The access token string.
Example
const token = await AccessToken . getCurrentAccessToken ();
console . log ( 'Token:' , token . accessToken );
// Use in API requests
const response = await fetch (
`https://graph.facebook.com/me?access_token= ${ token . accessToken } `
);
permissions
Array of permissions that have been granted.
permissions : Array < string >
Example
const token = await AccessToken . getCurrentAccessToken ();
console . log ( 'Granted permissions:' , token . permissions );
// Check for specific permission
if ( token . permissions . includes ( 'email' )) {
console . log ( 'Email permission granted' );
}
declinedPermissions
Array of permissions that have been declined by the user.
declinedPermissions : Array < string >
Example
const token = await AccessToken . getCurrentAccessToken ();
if ( token . declinedPermissions . includes ( 'user_friends' )) {
console . log ( 'User declined friends permission' );
// Maybe show UI explaining why you need it
}
expiredPermissions
Array of permissions that have expired.
expiredPermissions : Array < string >
Example
const token = await AccessToken . getCurrentAccessToken ();
if ( token . expiredPermissions . length > 0 ) {
console . log ( 'Expired permissions:' , token . expiredPermissions );
// Re-request expired permissions
await LoginManager . logInWithPermissions ( token . expiredPermissions );
}
applicationID
The Facebook App ID associated with this token.
Example
const token = await AccessToken . getCurrentAccessToken ();
console . log ( 'App ID:' , token . applicationID );
userID
The Facebook User ID associated with this token.
Example
const token = await AccessToken . getCurrentAccessToken ();
console . log ( 'User ID:' , token . userID );
// Use to fetch user data
const userData = await fetchUserData ( token . userID );
expirationTime
The expiration time of the access token (milliseconds since epoch).
Example
const token = await AccessToken . getCurrentAccessToken ();
const expiryDate = new Date ( token . expirationTime );
console . log ( 'Token expires:' , expiryDate . toLocaleString ());
// Check if expired
if ( token . expirationTime < Date . now ()) {
console . log ( 'Token has expired' );
await AccessToken . refreshCurrentAccessTokenAsync ();
}
// Check time until expiration
const hoursUntilExpiry = ( token . expirationTime - Date . now ()) / ( 1000 * 60 * 60 );
console . log ( `Token expires in ${ hoursUntilExpiry . toFixed ( 1 ) } hours` );
lastRefreshTime
The last time the token was refreshed (milliseconds since epoch).
Example
const token = await AccessToken . getCurrentAccessToken ();
const lastRefresh = new Date ( token . lastRefreshTime );
console . log ( 'Last refreshed:' , lastRefresh . toLocaleString ());
dataAccessExpirationTime
The data access expiration time (milliseconds since epoch).
dataAccessExpirationTime : number
Example
const token = await AccessToken . getCurrentAccessToken ();
const dataExpiry = new Date ( token . dataAccessExpirationTime );
console . log ( 'Data access expires:' , dataExpiry . toLocaleString ());
// Check if data access is expiring soon
const daysUntilExpiry = ( token . dataAccessExpirationTime - Date . now ()) / ( 1000 * 60 * 60 * 24 );
if ( daysUntilExpiry < 30 ) {
console . log ( 'Data access expiring soon, reauthorizing...' );
await LoginManager . reauthorizeDataAccess ();
}
accessTokenSource
The source of the access token (Android only).
accessTokenSource ?: string
Platform: Android only
Example
import { Platform } from 'react-native' ;
const token = await AccessToken . getCurrentAccessToken ();
if ( Platform . OS === 'android' && token . accessTokenSource ) {
console . log ( 'Token source:' , token . accessTokenSource );
}
Instance Methods
getExpires
Gets the expiration time of the access token.
Returns
number - Expiration time in milliseconds since epoch.
Example
const token = await AccessToken . getCurrentAccessToken ();
const expires = token . getExpires ();
console . log ( 'Expires:' , new Date ( expires ));
getPermissions
Gets the list of granted permissions.
getPermissions (): Array < string >
Returns
Array<string> - Array of granted permission strings.
Example
const token = await AccessToken . getCurrentAccessToken ();
const permissions = token . getPermissions ();
console . log ( 'Permissions:' , permissions );
getDeclinedPermissions
Gets the list of declined permissions.
getDeclinedPermissions (): Array < string >
Returns
Array<string> - Array of declined permission strings.
Example
const token = await AccessToken . getCurrentAccessToken ();
const declined = token . getDeclinedPermissions ();
if ( declined . includes ( 'email' )) {
console . log ( 'User declined email permission' );
}
getExpiredPermissions
Gets the list of expired permissions.
getExpiredPermissions (): Array < string >
Returns
Array<string> - Array of expired permission strings.
Example
const token = await AccessToken . getCurrentAccessToken ();
const expired = token . getExpiredPermissions ();
if ( expired . length > 0 ) {
console . log ( 'Expired permissions:' , expired );
}
getLastRefresh
Gets the last refresh time of the token.
Returns
number - Last refresh time in milliseconds since epoch.
Example
const token = await AccessToken . getCurrentAccessToken ();
const lastRefresh = token . getLastRefresh ();
console . log ( 'Last refreshed:' , new Date ( lastRefresh ));
getDataAccessExpiration
Gets the data access expiration time.
getDataAccessExpiration (): number
Returns
number - Data access expiration time in milliseconds since epoch.
Example
const token = await AccessToken . getCurrentAccessToken ();
const dataExpiry = token . getDataAccessExpiration ();
console . log ( 'Data expires:' , new Date ( dataExpiry ));
getApplicationId
Gets the Facebook App ID.
getApplicationId (): string
Returns
string - The Facebook App ID.
Example
const token = await AccessToken . getCurrentAccessToken ();
const appId = token . getApplicationId ();
console . log ( 'App ID:' , appId );
getUserId
Gets the Facebook User ID.
Returns
string - The Facebook User ID.
Example
const token = await AccessToken . getCurrentAccessToken ();
const userId = token . getUserId ();
console . log ( 'User ID:' , userId );
Types
AccessTokenMap
type AccessTokenMap = {
accessToken : string ;
permissions : Array < string >;
declinedPermissions : Array < string >;
expiredPermissions : Array < string >;
applicationID : string ;
userID : string ;
expirationTime : number ;
lastRefreshTime : number ;
dataAccessExpirationTime : number ;
accessTokenSource ?: string ; // Android only
}
Represents the raw access token data returned from the native SDK.
Complete Example
import React , { useState , useEffect } from 'react' ;
import { View , Text , Button , StyleSheet } from 'react-native' ;
import { AccessToken , LoginManager } from 'react-native-fbsdk-next' ;
function TokenInfo () {
const [ token , setToken ] = useState ( null );
const [ tokenInfo , setTokenInfo ] = useState ( null );
useEffect (() => {
// Check initial token
checkToken ();
// Listen for token changes
const removeListener = AccessToken . addListener (( newToken ) => {
console . log ( 'Token changed' );
setToken ( newToken );
if ( newToken ) {
updateTokenInfo ( newToken );
} else {
setTokenInfo ( null );
}
});
// Cleanup
return () => {
removeListener ();
};
}, []);
const checkToken = async () => {
const currentToken = await AccessToken . getCurrentAccessToken ();
setToken ( currentToken );
if ( currentToken ) {
updateTokenInfo ( currentToken );
}
};
const updateTokenInfo = ( accessToken ) => {
const now = Date . now ();
const expiresIn = accessToken . expirationTime - now ;
const dataExpiresIn = accessToken . dataAccessExpirationTime - now ;
setTokenInfo ({
expiresInHours: ( expiresIn / ( 1000 * 60 * 60 )). toFixed ( 1 ),
dataExpiresInDays: ( dataExpiresIn / ( 1000 * 60 * 60 * 24 )). toFixed ( 0 ),
expiryDate: new Date ( accessToken . expirationTime ),
dataExpiryDate: new Date ( accessToken . dataAccessExpirationTime ),
});
};
const handleRefresh = async () => {
try {
await AccessToken . refreshCurrentAccessTokenAsync ();
await checkToken ();
alert ( 'Token refreshed successfully' );
} catch ( error ) {
console . error ( 'Refresh failed:' , error );
alert ( 'Failed to refresh token' );
}
};
const handleReauthorize = async () => {
try {
const result = await LoginManager . reauthorizeDataAccess ();
if ( ! result . isCancelled ) {
await checkToken ();
alert ( 'Data access reauthorized' );
}
} catch ( error ) {
console . error ( 'Reauthorization failed:' , error );
}
};
if ( ! token ) {
return (
< View style = { styles . container } >
< Text > No active session </ Text >
</ View >
);
}
return (
< View style = { styles . container } >
< Text style = { styles . title } > Access Token Info </ Text >
< View style = { styles . infoSection } >
< Text style = { styles . label } > User ID: </ Text >
< Text style = { styles . value } > { token . userID } </ Text >
</ View >
< View style = { styles . infoSection } >
< Text style = { styles . label } > App ID: </ Text >
< Text style = { styles . value } > { token . applicationID } </ Text >
</ View >
< View style = { styles . infoSection } >
< Text style = { styles . label } > Permissions: </ Text >
< Text style = { styles . value } > { token . permissions . join ( ', ' ) } </ Text >
</ View >
{ token . declinedPermissions . length > 0 && (
< View style = { styles . infoSection } >
< Text style = { styles . label } > Declined: </ Text >
< Text style = { styles . value } >
{ token . declinedPermissions . join ( ', ' ) }
</ Text >
</ View >
) }
{ tokenInfo && (
<>
< View style = { styles . infoSection } >
< Text style = { styles . label } > Expires in: </ Text >
< Text style = { styles . value } > { tokenInfo . expiresInHours } hours </ Text >
</ View >
< View style = { styles . infoSection } >
< Text style = { styles . label } > Data access expires in: </ Text >
< Text style = { styles . value } > { tokenInfo . dataExpiresInDays } days </ Text >
</ View >
</>
) }
< View style = { styles . buttonContainer } >
< Button title = "Refresh Token" onPress = { handleRefresh } />
< Button title = "Reauthorize Data Access" onPress = { handleReauthorize } />
</ View >
</ View >
);
}
const styles = StyleSheet . create ({
container: {
flex: 1 ,
padding: 20 ,
backgroundColor: '#f5f5f5' ,
},
title: {
fontSize: 24 ,
fontWeight: 'bold' ,
marginBottom: 20 ,
},
infoSection: {
marginBottom: 15 ,
padding: 10 ,
backgroundColor: 'white' ,
borderRadius: 8 ,
},
label: {
fontSize: 14 ,
color: '#666' ,
marginBottom: 5 ,
},
value: {
fontSize: 16 ,
color: '#000' ,
},
buttonContainer: {
marginTop: 20 ,
gap: 10 ,
},
});
export default TokenInfo ;
See Also
Authentication Learn about Facebook authentication
LoginManager Perform login operations
AuthenticationToken iOS Limited Login authentication tokens
Graph API Make Graph API requests