react-native-nitro-auth 0.5.0 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -0
- package/android/src/main/cpp/PlatformAuth+Android.cpp +4 -1
- package/android/src/main/java/com/auth/AuthAdapter.kt +44 -13
- package/android/src/main/java/com/auth/GoogleSignInActivity.kt +2 -1
- package/android/src/main/java/com/auth/NitroAuthPackage.kt +2 -0
- package/lib/typescript/commonjs/Auth.nitro.d.ts +2 -0
- package/lib/typescript/commonjs/Auth.nitro.d.ts.map +1 -1
- package/lib/typescript/module/Auth.nitro.d.ts +2 -0
- package/lib/typescript/module/Auth.nitro.d.ts.map +1 -1
- package/nitrogen/generated/shared/c++/LoginOptions.hpp +5 -1
- package/package.json +8 -8
- package/src/Auth.nitro.ts +2 -0
package/README.md
CHANGED
|
@@ -95,6 +95,9 @@ Fastest way to confirm the package and Microsoft login work:
|
|
|
95
95
|
In the app, tap **Sign in with Microsoft**. A browser or in-app tab opens; sign in with a Microsoft/personal account, then you should return to the app with the user shown (email, name, provider MICROSOFT).
|
|
96
96
|
If you see "configuration_error", check `MICROSOFT_CLIENT_ID` and that the redirect URI in Azure matches your app (e.g. `msauth://com.auth.example/<client-id>` for the example app).
|
|
97
97
|
|
|
98
|
+
> [!TIP]
|
|
99
|
+
> In the example app on Android, you can toggle **Legacy Google Sign-In** to compare Credential Manager vs legacy GoogleSignIn (and to get `serverAuthCode`).
|
|
100
|
+
|
|
98
101
|
### Expo Setup
|
|
99
102
|
|
|
100
103
|
Add the plugin to `app.json` or `app.config.js`:
|
|
@@ -725,6 +728,15 @@ await login("google", {
|
|
|
725
728
|
> [!NOTE]
|
|
726
729
|
> One-Tap requires Google Play Services. You can check `hasPlayServices` from `useAuth()` and show a fallback UI if needed.
|
|
727
730
|
|
|
731
|
+
### Android Legacy Google Sign-In (Server Auth Code)
|
|
732
|
+
|
|
733
|
+
Credential Manager is the recommended default on Android, but it **does not return** `serverAuthCode`.
|
|
734
|
+
If your backend requires `serverAuthCode`, opt into the legacy flow:
|
|
735
|
+
|
|
736
|
+
```ts
|
|
737
|
+
await login("google", { useLegacyGoogleSignIn: true });
|
|
738
|
+
```
|
|
739
|
+
|
|
728
740
|
### Force Account Picker
|
|
729
741
|
|
|
730
742
|
When connecting additional services (like Google Calendar), you may want to let users pick a different account than the one they signed in with. Use `forceAccountPicker` to clear any cached session and show the account picker:
|
|
@@ -802,6 +814,7 @@ This is useful for scenarios where:
|
|
|
802
814
|
| `useOneTap` | `boolean` | Android | Enable Google One-Tap (Credential Manager) |
|
|
803
815
|
| `useSheet` | `boolean` | iOS | Enable iOS Google Sign-In Sheet |
|
|
804
816
|
| `forceAccountPicker` | `boolean` | All | Always show the account selection screen |
|
|
817
|
+
| `useLegacyGoogleSignIn` | `boolean` | Android | Use legacy Google Sign-In (supports `serverAuthCode`) |
|
|
805
818
|
| `tenant` | `string` | Microsoft | Azure AD tenant (`common`, `organizations`, etc.) |
|
|
806
819
|
| `prompt` | `string` | Microsoft | Prompt behavior (`login`, `consent`, `select_account`, `none`) |
|
|
807
820
|
|
|
@@ -51,6 +51,7 @@ std::shared_ptr<Promise<AuthUser>> PlatformAuth::login(AuthProvider provider, co
|
|
|
51
51
|
std::optional<std::string> prompt;
|
|
52
52
|
bool useOneTap = false;
|
|
53
53
|
bool forceAccountPicker = false;
|
|
54
|
+
bool useLegacyGoogleSignIn = false;
|
|
54
55
|
|
|
55
56
|
if (options) {
|
|
56
57
|
if (options->scopes) scopes = *options->scopes;
|
|
@@ -66,6 +67,7 @@ std::shared_ptr<Promise<AuthUser>> PlatformAuth::login(AuthProvider provider, co
|
|
|
66
67
|
}
|
|
67
68
|
useOneTap = options->useOneTap.value_or(false);
|
|
68
69
|
forceAccountPicker = options->forceAccountPicker.value_or(false);
|
|
70
|
+
useLegacyGoogleSignIn = options->useLegacyGoogleSignIn.value_or(false);
|
|
69
71
|
}
|
|
70
72
|
|
|
71
73
|
JNIEnv* env = Environment::current();
|
|
@@ -81,7 +83,7 @@ std::shared_ptr<Promise<AuthUser>> PlatformAuth::login(AuthProvider provider, co
|
|
|
81
83
|
|
|
82
84
|
jclass adapterClass = env->FindClass("com/auth/AuthAdapter");
|
|
83
85
|
jmethodID loginMethod = env->GetStaticMethodID(adapterClass, "loginSync",
|
|
84
|
-
"(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;
|
|
86
|
+
"(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;ZZZLjava/lang/String;Ljava/lang/String;)V");
|
|
85
87
|
env->CallStaticVoidMethod(adapterClass, loginMethod,
|
|
86
88
|
contextPtr,
|
|
87
89
|
make_jstring(providerStr).get(),
|
|
@@ -90,6 +92,7 @@ std::shared_ptr<Promise<AuthUser>> PlatformAuth::login(AuthProvider provider, co
|
|
|
90
92
|
jLoginHint,
|
|
91
93
|
(jboolean)useOneTap,
|
|
92
94
|
(jboolean)forceAccountPicker,
|
|
95
|
+
(jboolean)useLegacyGoogleSignIn,
|
|
93
96
|
jTenant,
|
|
94
97
|
jPrompt);
|
|
95
98
|
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
@file:Suppress("DEPRECATION")
|
|
2
|
+
|
|
1
3
|
package com.auth
|
|
2
4
|
|
|
3
5
|
import android.content.Context
|
|
@@ -157,7 +159,18 @@ object AuthAdapter {
|
|
|
157
159
|
}
|
|
158
160
|
|
|
159
161
|
@JvmStatic
|
|
160
|
-
fun loginSync(
|
|
162
|
+
fun loginSync(
|
|
163
|
+
context: Context,
|
|
164
|
+
provider: String,
|
|
165
|
+
googleClientId: String?,
|
|
166
|
+
scopes: Array<String>?,
|
|
167
|
+
loginHint: String?,
|
|
168
|
+
useOneTap: Boolean,
|
|
169
|
+
forceAccountPicker: Boolean = false,
|
|
170
|
+
useLegacyGoogleSignIn: Boolean = false,
|
|
171
|
+
tenant: String? = null,
|
|
172
|
+
prompt: String? = null
|
|
173
|
+
) {
|
|
161
174
|
if (provider == "apple") {
|
|
162
175
|
nativeOnLoginError("unsupported_provider", "Apple Sign-In is not supported on Android.")
|
|
163
176
|
return
|
|
@@ -183,13 +196,12 @@ object AuthAdapter {
|
|
|
183
196
|
val requestedScopes = scopes?.toList() ?: listOf("email", "profile")
|
|
184
197
|
pendingScopes = requestedScopes
|
|
185
198
|
|
|
186
|
-
if (
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
val intent = GoogleSignInActivity.createIntent(ctx, clientId, requestedScopes.toTypedArray(), loginHint, forceAccountPicker)
|
|
190
|
-
intent.addFlags(android.content.Intent.FLAG_ACTIVITY_NEW_TASK)
|
|
191
|
-
ctx.startActivity(intent)
|
|
199
|
+
if (useLegacyGoogleSignIn) {
|
|
200
|
+
loginLegacy(context, clientId, requestedScopes, loginHint, forceAccountPicker)
|
|
201
|
+
return
|
|
192
202
|
}
|
|
203
|
+
|
|
204
|
+
loginOneTap(context, clientId, requestedScopes, loginHint, forceAccountPicker, useOneTap)
|
|
193
205
|
}
|
|
194
206
|
|
|
195
207
|
private fun loginMicrosoft(context: Context, scopes: Array<String>?, loginHint: String?, tenant: String?, prompt: String?) {
|
|
@@ -470,18 +482,25 @@ object AuthAdapter {
|
|
|
470
482
|
}
|
|
471
483
|
}
|
|
472
484
|
|
|
473
|
-
private fun loginOneTap(
|
|
485
|
+
private fun loginOneTap(
|
|
486
|
+
context: Context,
|
|
487
|
+
clientId: String,
|
|
488
|
+
scopes: List<String>,
|
|
489
|
+
loginHint: String?,
|
|
490
|
+
forceAccountPicker: Boolean,
|
|
491
|
+
useOneTap: Boolean
|
|
492
|
+
) {
|
|
474
493
|
val activity = currentActivity ?: context as? Activity
|
|
475
494
|
if (activity == null) {
|
|
476
495
|
Log.w(TAG, "No Activity context available for One-Tap, falling back to legacy")
|
|
477
|
-
return loginLegacy(context, clientId, scopes)
|
|
496
|
+
return loginLegacy(context, clientId, scopes, loginHint, forceAccountPicker)
|
|
478
497
|
}
|
|
479
498
|
|
|
480
499
|
val credentialManager = CredentialManager.create(activity)
|
|
481
500
|
val googleIdOption = GetGoogleIdOption.Builder()
|
|
482
501
|
.setFilterByAuthorizedAccounts(false)
|
|
483
502
|
.setServerClientId(clientId)
|
|
484
|
-
.setAutoSelectEnabled(
|
|
503
|
+
.setAutoSelectEnabled(useOneTap && !forceAccountPicker)
|
|
485
504
|
.build()
|
|
486
505
|
|
|
487
506
|
val request = GetCredentialRequest.Builder()
|
|
@@ -494,14 +513,26 @@ object AuthAdapter {
|
|
|
494
513
|
handleCredentialResponse(result, scopes)
|
|
495
514
|
} catch (e: Exception) {
|
|
496
515
|
Log.w(TAG, "One-Tap failed, falling back to legacy: ${e.message}")
|
|
497
|
-
loginLegacy(context, clientId, scopes)
|
|
516
|
+
loginLegacy(context, clientId, scopes, loginHint, forceAccountPicker)
|
|
498
517
|
}
|
|
499
518
|
}
|
|
500
519
|
}
|
|
501
520
|
|
|
502
|
-
private fun loginLegacy(
|
|
521
|
+
private fun loginLegacy(
|
|
522
|
+
context: Context,
|
|
523
|
+
clientId: String,
|
|
524
|
+
scopes: List<String>,
|
|
525
|
+
loginHint: String?,
|
|
526
|
+
forceAccountPicker: Boolean
|
|
527
|
+
) {
|
|
503
528
|
val ctx = appContext ?: context.applicationContext
|
|
504
|
-
val intent = GoogleSignInActivity.createIntent(
|
|
529
|
+
val intent = GoogleSignInActivity.createIntent(
|
|
530
|
+
ctx,
|
|
531
|
+
clientId,
|
|
532
|
+
scopes.toTypedArray(),
|
|
533
|
+
loginHint,
|
|
534
|
+
forceAccountPicker
|
|
535
|
+
)
|
|
505
536
|
intent.addFlags(android.content.Intent.FLAG_ACTIVITY_NEW_TASK)
|
|
506
537
|
ctx.startActivity(intent)
|
|
507
538
|
}
|
|
@@ -11,6 +11,8 @@ export interface LoginOptions {
|
|
|
11
11
|
useSheet?: boolean;
|
|
12
12
|
/** Force account picker to show, ignoring any cached session or loginHint */
|
|
13
13
|
forceAccountPicker?: boolean;
|
|
14
|
+
/** (Android only) Use legacy Google Sign-In flow (e.g. for serverAuthCode) */
|
|
15
|
+
useLegacyGoogleSignIn?: boolean;
|
|
14
16
|
/** (Microsoft only) Azure AD tenant - "common", "organizations", "consumers", or tenant ID */
|
|
15
17
|
tenant?: string;
|
|
16
18
|
/** (Microsoft only) Prompt behavior for login */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Auth.nitro.d.ts","sourceRoot":"","sources":["../../../src/Auth.nitro.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Auth.nitro.d.ts","sourceRoot":"","sources":["../../../src/Auth.nitro.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,8 @@ export interface LoginOptions {
|
|
|
11
11
|
useSheet?: boolean;
|
|
12
12
|
/** Force account picker to show, ignoring any cached session or loginHint */
|
|
13
13
|
forceAccountPicker?: boolean;
|
|
14
|
+
/** (Android only) Use legacy Google Sign-In flow (e.g. for serverAuthCode) */
|
|
15
|
+
useLegacyGoogleSignIn?: boolean;
|
|
14
16
|
/** (Microsoft only) Azure AD tenant - "common", "organizations", "consumers", or tenant ID */
|
|
15
17
|
tenant?: string;
|
|
16
18
|
/** (Microsoft only) Prompt behavior for login */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Auth.nitro.d.ts","sourceRoot":"","sources":["../../../src/Auth.nitro.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Auth.nitro.d.ts","sourceRoot":"","sources":["../../../src/Auth.nitro.ts"],"names":[],"mappings":"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"}
|
|
@@ -48,12 +48,13 @@ namespace margelo::nitro::NitroAuth {
|
|
|
48
48
|
std::optional<bool> useOneTap SWIFT_PRIVATE;
|
|
49
49
|
std::optional<bool> useSheet SWIFT_PRIVATE;
|
|
50
50
|
std::optional<bool> forceAccountPicker SWIFT_PRIVATE;
|
|
51
|
+
std::optional<bool> useLegacyGoogleSignIn SWIFT_PRIVATE;
|
|
51
52
|
std::optional<std::string> tenant SWIFT_PRIVATE;
|
|
52
53
|
std::optional<MicrosoftPrompt> prompt SWIFT_PRIVATE;
|
|
53
54
|
|
|
54
55
|
public:
|
|
55
56
|
LoginOptions() = default;
|
|
56
|
-
explicit LoginOptions(std::optional<std::vector<std::string>> scopes, std::optional<std::string> loginHint, std::optional<bool> useOneTap, std::optional<bool> useSheet, std::optional<bool> forceAccountPicker, std::optional<std::string> tenant, std::optional<MicrosoftPrompt> prompt): scopes(scopes), loginHint(loginHint), useOneTap(useOneTap), useSheet(useSheet), forceAccountPicker(forceAccountPicker), tenant(tenant), prompt(prompt) {}
|
|
57
|
+
explicit LoginOptions(std::optional<std::vector<std::string>> scopes, std::optional<std::string> loginHint, std::optional<bool> useOneTap, std::optional<bool> useSheet, std::optional<bool> forceAccountPicker, std::optional<bool> useLegacyGoogleSignIn, std::optional<std::string> tenant, std::optional<MicrosoftPrompt> prompt): scopes(scopes), loginHint(loginHint), useOneTap(useOneTap), useSheet(useSheet), forceAccountPicker(forceAccountPicker), useLegacyGoogleSignIn(useLegacyGoogleSignIn), tenant(tenant), prompt(prompt) {}
|
|
57
58
|
|
|
58
59
|
public:
|
|
59
60
|
friend bool operator==(const LoginOptions& lhs, const LoginOptions& rhs) = default;
|
|
@@ -74,6 +75,7 @@ namespace margelo::nitro {
|
|
|
74
75
|
JSIConverter<std::optional<bool>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "useOneTap"))),
|
|
75
76
|
JSIConverter<std::optional<bool>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "useSheet"))),
|
|
76
77
|
JSIConverter<std::optional<bool>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "forceAccountPicker"))),
|
|
78
|
+
JSIConverter<std::optional<bool>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "useLegacyGoogleSignIn"))),
|
|
77
79
|
JSIConverter<std::optional<std::string>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "tenant"))),
|
|
78
80
|
JSIConverter<std::optional<margelo::nitro::NitroAuth::MicrosoftPrompt>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "prompt")))
|
|
79
81
|
);
|
|
@@ -85,6 +87,7 @@ namespace margelo::nitro {
|
|
|
85
87
|
obj.setProperty(runtime, PropNameIDCache::get(runtime, "useOneTap"), JSIConverter<std::optional<bool>>::toJSI(runtime, arg.useOneTap));
|
|
86
88
|
obj.setProperty(runtime, PropNameIDCache::get(runtime, "useSheet"), JSIConverter<std::optional<bool>>::toJSI(runtime, arg.useSheet));
|
|
87
89
|
obj.setProperty(runtime, PropNameIDCache::get(runtime, "forceAccountPicker"), JSIConverter<std::optional<bool>>::toJSI(runtime, arg.forceAccountPicker));
|
|
90
|
+
obj.setProperty(runtime, PropNameIDCache::get(runtime, "useLegacyGoogleSignIn"), JSIConverter<std::optional<bool>>::toJSI(runtime, arg.useLegacyGoogleSignIn));
|
|
88
91
|
obj.setProperty(runtime, PropNameIDCache::get(runtime, "tenant"), JSIConverter<std::optional<std::string>>::toJSI(runtime, arg.tenant));
|
|
89
92
|
obj.setProperty(runtime, PropNameIDCache::get(runtime, "prompt"), JSIConverter<std::optional<margelo::nitro::NitroAuth::MicrosoftPrompt>>::toJSI(runtime, arg.prompt));
|
|
90
93
|
return obj;
|
|
@@ -102,6 +105,7 @@ namespace margelo::nitro {
|
|
|
102
105
|
if (!JSIConverter<std::optional<bool>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "useOneTap")))) return false;
|
|
103
106
|
if (!JSIConverter<std::optional<bool>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "useSheet")))) return false;
|
|
104
107
|
if (!JSIConverter<std::optional<bool>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "forceAccountPicker")))) return false;
|
|
108
|
+
if (!JSIConverter<std::optional<bool>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "useLegacyGoogleSignIn")))) return false;
|
|
105
109
|
if (!JSIConverter<std::optional<std::string>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "tenant")))) return false;
|
|
106
110
|
if (!JSIConverter<std::optional<margelo::nitro::NitroAuth::MicrosoftPrompt>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "prompt")))) return false;
|
|
107
111
|
return true;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-nitro-auth",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.1",
|
|
4
4
|
"description": "High-performance authentication library for React Native with Google Sign-In, Apple Sign-In, and Microsoft Sign-In support, powered by Nitro Modules (JSI)",
|
|
5
5
|
"main": "lib/commonjs/index.js",
|
|
6
6
|
"module": "lib/module/index.js",
|
|
@@ -79,12 +79,12 @@
|
|
|
79
79
|
},
|
|
80
80
|
"devDependencies": {
|
|
81
81
|
"@expo/config-plugins": "^54.0.4",
|
|
82
|
-
"@react-native/babel-preset": "^0.
|
|
83
|
-
"@testing-library/react": "^16.
|
|
84
|
-
"@types/node": "^
|
|
85
|
-
"jest-environment-jsdom": "^
|
|
86
|
-
"react": "19.
|
|
87
|
-
"react-native": "0.
|
|
82
|
+
"@react-native/babel-preset": "^0.81.0",
|
|
83
|
+
"@testing-library/react": "^16.1.0",
|
|
84
|
+
"@types/node": "^22.14.0",
|
|
85
|
+
"jest-environment-jsdom": "^29.7.0",
|
|
86
|
+
"react": "19.1.0",
|
|
87
|
+
"react-native": "0.81.5",
|
|
88
88
|
"react-native-nitro-modules": "^0.33.7",
|
|
89
89
|
"react-native-web": "^0.21.2",
|
|
90
90
|
"typescript": "^5.9.3"
|
|
@@ -92,7 +92,7 @@
|
|
|
92
92
|
"peerDependencies": {
|
|
93
93
|
"react": "*",
|
|
94
94
|
"react-native": ">=0.75.0",
|
|
95
|
-
"react-native-nitro-modules": ">=0.33.
|
|
95
|
+
"react-native-nitro-modules": ">=0.33.7"
|
|
96
96
|
},
|
|
97
97
|
"react-native-builder-bob": {
|
|
98
98
|
"source": "src",
|
package/src/Auth.nitro.ts
CHANGED
|
@@ -27,6 +27,8 @@ export interface LoginOptions {
|
|
|
27
27
|
useSheet?: boolean;
|
|
28
28
|
/** Force account picker to show, ignoring any cached session or loginHint */
|
|
29
29
|
forceAccountPicker?: boolean;
|
|
30
|
+
/** (Android only) Use legacy Google Sign-In flow (e.g. for serverAuthCode) */
|
|
31
|
+
useLegacyGoogleSignIn?: boolean;
|
|
30
32
|
/** (Microsoft only) Azure AD tenant - "common", "organizations", "consumers", or tenant ID */
|
|
31
33
|
tenant?: string;
|
|
32
34
|
/** (Microsoft only) Prompt behavior for login */
|