Skip to content

Commit f8727f7

Browse files
Merge pull request #378 from okta/rn_sessionClient_fix
Fix sessionClient being null when not calling signIn
2 parents 7ed0203 + 24c6feb commit f8727f7

File tree

3 files changed

+29
-4
lines changed

3 files changed

+29
-4
lines changed

CHANGELOG.md

+5
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
# 2.9.1
2+
3+
### Bug Fix
4+
- [#378](https://github.com/okta/okta-react-native/pull/378) Fix sessionClient being null when not calling login
5+
16
# 2.9.0
27

38
### Bug Fix

android/src/main/java/com/oktareactnative/OktaSdkBridgeModule.java

+23-3
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@
1717

1818
import android.annotation.SuppressLint;
1919
import android.app.Activity;
20+
import android.content.Context;
2021
import android.content.Intent;
22+
import android.content.SharedPreferences;
2123
import android.graphics.Color;
2224

2325
import androidx.annotation.NonNull;
@@ -55,18 +57,26 @@
5557

5658
public class OktaSdkBridgeModule extends ReactContextBaseJavaModule implements ActivityEventListener {
5759

60+
private static final String SESSION_CLIENT_SHARED_PREFS = "OKTA_SDK_BRIDGE_MODULE_SESSION_CLIENT";
61+
private static final String PREFS_KEY = "SESSION_CLIENT";
62+
private static final String SESSION_CLIENT_AUTH = "AUTH";
63+
private static final String SESSION_CLIENT_WEB = "WEB";
5864
private final ReactApplicationContext reactContext;
5965
private OIDCConfig config;
6066
private WebAuthClient webClient;
6167
private AuthClient authClient;
6268
private SessionClient sessionClient;
6369
private Promise queuedPromise;
6470
private LastRequestType mLastRequestType;
71+
private SharedPreferences sharedPreferences;
72+
private SharedPreferences.Editor sharedPreferencesEditor;
6573

6674
public OktaSdkBridgeModule(ReactApplicationContext reactContext) {
6775
super(reactContext);
6876
this.reactContext = reactContext;
6977
this.reactContext.addActivityEventListener(this);
78+
this.sharedPreferences = reactContext.getSharedPreferences(SESSION_CLIENT_SHARED_PREFS, Context.MODE_PRIVATE);
79+
this.sharedPreferencesEditor = sharedPreferences.edit();
7080
}
7181

7282
@Override
@@ -130,6 +140,12 @@ public void createConfig(String clientId,
130140
this.authClient = authClientBuilder.create();
131141

132142
promise.resolve(true);
143+
144+
if (SESSION_CLIENT_WEB.equals(sharedPreferences.getString(PREFS_KEY, SESSION_CLIENT_WEB))) {
145+
sessionClient = this.webClient.getSessionClient();
146+
} else {
147+
sessionClient = this.authClient.getSessionClient();
148+
}
133149
} catch (Exception e) {
134150
promise.reject(OktaSdkError.OKTA_OIDC_ERROR.getErrorCode(), e.getLocalizedMessage(), e);
135151
}
@@ -219,6 +235,7 @@ public void authenticate(String sessionToken, final Promise promise) {
219235
public void onSuccess(@NonNull Result result) {
220236
if (result.isSuccess()) {
221237
try {
238+
sharedPreferencesEditor.putString(PREFS_KEY, SESSION_CLIENT_AUTH).apply();
222239
sessionClient = authClient.getSessionClient();
223240
Tokens tokens = sessionClient.getTokens();
224241
String token = tokens.getAccessToken();
@@ -233,13 +250,15 @@ public void onSuccess(@NonNull Result result) {
233250
params.putString(OktaSdkConstant.ACCESS_TOKEN_KEY, token);
234251
promise.resolve(params);
235252
} catch (AuthorizationException e) {
253+
sharedPreferencesEditor.clear().apply();
236254
WritableMap params = Arguments.createMap();
237255
params.putString(OktaSdkConstant.ERROR_CODE_KEY, OktaSdkError.SIGN_IN_FAILED.getErrorCode());
238256
params.putString(OktaSdkConstant.ERROR_MSG_KEY, OktaSdkError.SIGN_IN_FAILED.getErrorMessage());
239257
sendEvent(reactContext, OktaSdkConstant.ON_ERROR, params);
240258
promise.reject(OktaSdkError.SIGN_IN_FAILED.getErrorCode(), OktaSdkError.SIGN_IN_FAILED.getErrorMessage());
241259
}
242260
} else {
261+
sharedPreferencesEditor.clear().apply();
243262
WritableMap params = Arguments.createMap();
244263
params.putString(OktaSdkConstant.ERROR_CODE_KEY, OktaSdkError.SIGN_IN_FAILED.getErrorCode());
245264
params.putString(OktaSdkConstant.ERROR_MSG_KEY, OktaSdkError.SIGN_IN_FAILED.getErrorMessage());
@@ -250,6 +269,7 @@ public void onSuccess(@NonNull Result result) {
250269

251270
@Override
252271
public void onError(String error, AuthorizationException exception) {
272+
sharedPreferencesEditor.clear().apply();
253273
WritableMap params = Arguments.createMap();
254274
params.putString(OktaSdkConstant.ERROR_CODE_KEY, OktaSdkError.OKTA_OIDC_ERROR.getErrorCode());
255275
params.putString(OktaSdkConstant.ERROR_MSG_KEY, error);
@@ -447,7 +467,6 @@ public void clearTokens(final Promise promise) {
447467
authClient.getSessionClient().clear();
448468
}
449469

450-
sessionClient = null;
451470
promise.resolve(true);
452471
} catch (Exception e) {
453472
promise.reject(OktaSdkError.OKTA_OIDC_ERROR.getErrorCode(), e.getLocalizedMessage(), e);
@@ -514,6 +533,7 @@ public void onSuccess(@NonNull AuthorizationStatus status) {
514533
}
515534
sendEvent(reactContext, OktaSdkConstant.SIGN_IN_SUCCESS, params);
516535
sessionClient = localSessionClient;
536+
sharedPreferencesEditor.putString(PREFS_KEY, SESSION_CLIENT_WEB);
517537
queuedPromise = null;
518538
} catch (AuthorizationException e) {
519539
WritableMap params = Arguments.createMap();
@@ -523,12 +543,12 @@ public void onSuccess(@NonNull AuthorizationStatus status) {
523543
promise.reject(e);
524544
}
525545
sendEvent(reactContext, OktaSdkConstant.ON_ERROR, params);
526-
sessionClient = null;
546+
sharedPreferencesEditor.clear().apply();
527547
queuedPromise = null;
528548
}
529549
} else if (status == AuthorizationStatus.SIGNED_OUT) {
530550
localSessionClient.clear();
531-
sessionClient = null;
551+
sharedPreferencesEditor.clear().apply();
532552
WritableMap params = Arguments.createMap();
533553
params.putString(OktaSdkConstant.RESOLVE_TYPE_KEY, OktaSdkConstant.SIGNED_OUT);
534554
if (promise != null) {

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"private": true,
33
"name": "@okta/okta-react-native",
44
"title": "React Native Okta Sdk Bridge",
5-
"version": "2.9.0",
5+
"version": "2.9.1",
66
"types": "types/index.d.ts",
77
"description": "Okta OIDC for React Native",
88
"main": "dist/index.js",

0 commit comments

Comments
 (0)