Crates.io | leptos_oidc |
lib.rs | leptos_oidc |
version | 0.9.0 |
created_at | 2023-11-01 23:13:53.420106+00 |
updated_at | 2025-06-13 18:22:02.635458+00 |
description | A Leptos utility library for simplified OpenID Connect (OIDC) authentication integration. |
homepage | |
repository | https://gitlab.com/kerkmann/leptos_oidc |
max_upload_size | |
id | 1021885 |
size | 124,333 |
leptos_oidc is a utility library for handling OpenID Connect (OIDC) authentication within the Leptos framework. It simplifies the integration of OIDC authentication flows with Leptos-based applications, making it easier to manage user authentication and tokens.
Crate version | Compatible Leptos version |
---|---|
<= 0.3 | 0.5 |
0.4-0.7 | 0.6 |
0.8 | 0.7 |
0.9 | 0.8 |
leptos_oidc offers the following features:
leptos_oidc was tested with various backends. This doesn't mean that other
backends are not supported. Every backend which supports oidc
should work.
But feel free to ask for advice or give feedback!
Tested backends:
You can find a setup guide for the backends under docs/backends.
To use leptos_oidc in your Leptos-based application, add it as a dependency
in your Cargo.toml
file:
[dependencies]
leptos_oidc = "0.9"
Note: This needs at least leptos v0.8
.
To get started with OIDC authentication, initialize the library with the
required authentication parameters. You can use the AuthParameters
struct
to specify the OIDC endpoints, client ID, redirect URIs, and other relevant
information.
Please make sure that the issuer
url is the base url without the /.well-known/openid-configuration
and without a trailing slash.
A simple example may be found here.
Note: Please keep in mind that the Auth::init
needs to be inside a Router
.
The internal state is using use_query
and use_navigate
, which is only available inside a
Router
.
leptos_oidc provides functions to generate login and logout URLs for your application. These URLs are used to redirect users to the OIDC provider for authentication and logout. They are available once the authentication is initialized.
use leptos::prelude::*;
use leptos_oidc::Auth;
#[component]
fn MyComponent() {
let auth = expect_context::<AuthSignal>();
// Generate the login URL to initiate the authentication process.
let login_url = move || {
auth.with(|auth| {
auth
.unauthenticated()
.map(|unauthenticated| unauthenticated.login_url())
})
};
// Generate the logout URL for logging out the user.
let logout_url = move || {
auth.get()
.authenticated()
.map(|authenticated| authenticated.logout_url())
};
}
The library includes transparent components to conditionally render content based on the authentication state. These components simplify the user interface when dealing with authenticated and unauthenticated users.
use leptos::prelude::*;
use leptos_oidc::Auth;
#[component]
fn MyComponent() {
view! {
// Generate Sign In link
<LoginLink class="optional-class-attributes">Sign in</LoginLink>
// Generate Sign Out link
<LogoutLink class="optional-class-attributes">Sign Out</LogoutLink>
<AuthLoaded>"This will be rendered only when the auth library is not loading anymore"</AuthLoaded>
<AuthLoading>"This will be rendered only when the auth library is still loading"</AuthLoading>
<Authenticated>"This will only be rendered if the user is authenticated"</Authenticated>
<AuthErrorContext>"This will only be rendered if there was an error during authentication"</AuthErrorContext>
// A more complex example with optional fallbacks for the loading and unauthenticated state
<Authenticated
unauthenticated=move || view! { "this will only be rendered if the user is unauthenticated" }
loading=move || view! { "this will only be rendered if the library is still loading" }
>
"This will only be rendered if the user is authenticated"
</Authenticated>
}
}
This library is now capable of refreshing the access_token
in the background. :)
leptos_oidc is distributed under the MIT License. For more information, see the LICENSE file.