Open norenz92 opened 3 months ago
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
linkIdentity
in 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
?
Bug report
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