auth
auth copied to clipboard
linkIdentity() does not work with React Native
Bug report
- [X] I confirm this is a bug with Supabase, not with my own application.
- [X] I confirm I have searched the Docs, GitHub Discussions, and Discord.
Describe the bug
Not sure if this is a bug or just not compatible with React Native, but there is no way to use linkIdentity() with native social logins like Google, Facebook and Apple in a React Native app. Documentation does not provide any information on how to implement this.
System information
- OS: macOS
- Version of supabase-js: 2.44.2
- Version of Node.js: v20.5.1
no way to use linkIdentity() with native social logins like Google, Facebook and Apple in a React Native app
@norenz92 can you elaborate more on this statement? do you get some sort of error when you call linkIdentity in a react native environment?
no way to use linkIdentity() with native social logins like Google, Facebook and Apple in a React Native app
@norenz92 can you elaborate more on this statement? do you get some sort of error when you call
linkIdentityin a react native environment?
No error. It's just that this function does not seem to be meant to use with native auth for these providers. The function returns a redirect URL which from AFAIK has no use in my case.
@norenz92 it works just like signInWithOAuth(), where you need to redirect the user to the URL returned
@norenz92 it works just like
signInWithOAuth(), where you need to redirect the user to the URL returned
I don't want to redirect the user to a browser from the app...
@norenz92 I was confused in a similar way, you will need to utilise something like expo-web-browser to prompt open an in-app browser to handle the redirecting. This seems to be the standard way to handle social logins inside of apps.. I'm not aware of a different solution.
Linking works also in React Native with the standard OAuth flow over the web-browser, for anyone interested, this is how I got it to work, linking the user through an in-app browser:
const { data, error } = await supabase.auth.linkIdentity({
provider: "apple",
options: {
skipBrowserRedirect: true,
redirectTo: "<YOUR_APP_DEEPLINK>",
},
});
if (data.url) {
await WebBrowser.openAuthSessionAsync(
data.url,
"<YOU_APP_DEEPLINK>"
);
}
However I agree with @norenz92 that this could be improved. Supabase already has capabilities to support native sign-in methods on mobile platforms (see docs).
Currently I can already offer a native sign-in this way using expo-apple-authentication:
const credential = await AppleAuthentication.signInAsync({
requestedScopes: [AppleAuthentication.AppleAuthenticationScope.EMAIL],
});
// This works for non-anonymous signups
await supabase.auth.signInWithIdToken({
provider: "apple",
token: credential.identityToken,
});
// This is how I would imagine linkIdentity to support native sign-ins
const { data, error } = await supabase.auth.linkIdentity({
provider: "apple",
token: credential.identityToken, // This is currently not possible!
options: { skipBrowserRedirect: true },
});
Is there anything speaking against allowing us to pass the OIDC token to linkIdentity like we can already do with signInWithIdToken?
+1 on this! Having the possiblity to linkIdentity with a token property would be amazing. Linked issue https://github.com/orgs/supabase/discussions/29017
Any update on this?