Initializing
Create Supabase Client
Independently of which Supabase module you are using, you will need to initialize the main client first and install the module.
To create a new client, you can use the createSupabaseClient
function.
When installing a module, you can pass a block to configure it.
OAuth and OTP link verification
supabase-kt provides several platform implementations for OAuth and OTP link verification.
On JVM, it uses a HTTP Callback Server to receive the session data from a successful OAuth login.
Note: OTP link verification such as sign ups are not supported on JVM. You may have to send a verification token rather than a url in your E-Mail. To send the token, rather than a redirect url, you have to change {{ .ConfirmationURL }}
in your sign up email to {{ .Token }}
On Android, IOS & MacOS, it uses deeplinks. Refer to the guide below on how to setup deeplinks. Alternatively you could use Native Google Auth or a WebView for OAuth. Refer to our demo to learn more. On JS, it uses the website origin as the callback url. Session importing gets handled automatically. Windows, tvOS, watchOS & Linux currently have no default implementation. Feel free to create a PR.
You always make your own implementation and use gotrue.parseSessionFromFragment(fragment)
or gotrue.parseSessionFromUrl(url)
to let supabase-kt handle the parsing after receiving a callback.
Then you can simply use gotrue.importSession(session)
.
Configure deeplink callbacks for Authentication
Deeplinks are supported on Android, IOS and MacOS.
- Setup a deeplink for you app
On Android you may setup a deeplink in your Android manifest.
On IOS & MacOS you may setup a url scheme. - Add your deeplink to the redirect URLs
Pattern: scheme://host - Configure the GoTrue plugin
You have to set the
host
and thescheme
in the GoTrue config:install(GoTrue) { host = "deeplink host" // this can be anything, eg. your package name or app/company url (not your supabase url) scheme = "deeplink scheme" //Android only, you can also change that OAuth/SSO logins open in a custom tab, rather than an external browser: defaultExternalAuthAction = ExternalAuthAction.CUSTOM_TABS //defaults to EXTERNAL_BROWSER }
- Call platform specific function on startup
On Android:client.handleDeeplinks(intent)
On IOS/MacOS:client.handleDeeplinks(url)
Then you can just login using OAuth:
client.gotrue.loginWith(Google)
Or open OTP links directly in your app.
PKCE Authentication flow
supabase-kt supports the PKCE authentication flow.
To use it, you just have to change the flowType
in the GoTrue configuration:
install(GoTrue) {
flowType = FlowType.PKCE
}
That's it! If you already implemented deeplinks to handle OTPs and OAuth you don't have to change anything!
val client = createSupabaseClient(
supabaseUrl = "https://xyzcompany.supabase.co",
supabaseKey = "public-anon-key"
) {
install(GoTrue)
install(Postgrest)
//install other modules
}