OAuth2 component for Yew

crates.io docs.rs CI

Add to your Cargo.toml:

toml yew-oauth2 = "0.5"

By default, the router integration is disabled, you can enable it using:

toml yew-oauth2 = { version = "0.5", features = ["router"] }

OpenID Connect

Starting with version 0.2.0, this crate also supports Open ID Connect. That should be just an extension on top of OAuth2, but the reality is more complicated.

In order to use this, a different crate is required in the background. That crate also has a dependency on ring, which uses a lot of C code, which is not available on WASM.

That is why this functionality is gated by the feature openid. When you enable this feature, for the time being, you will also need to use the patched version of openidconnect, by adding the following to your Cargo.toml:

```toml [dependencies]

YES, you need to add this additionally to your application!

openidconnect = { version = "2.2", default-features = false, features = ["reqwest", "rustls-tls", "rustcrypto"] }

[patch.crates-io] openidconnect = { git = "https://github.com/ctron/openidconnect-rs", rev = "6ca4a9ab9de35600c44a8b830693137d4769edf4" } ```

Also see: https://github.com/ramosbugs/openidconnect-rs/pull/58

Examples

A quick example how to use it (see below for more complete examples):

``rust use yew::prelude::*; use yew_oauth2::prelude::*; use yew_oauth2::oauth2::*; // useopenid::*` when using OpenID connect

[function_component(MyApplication)]

fn myapp() -> Html { let config = Config { clientid: "my-client".into(), authurl: "https://my-sso/auth/realms/my-realm/protocol/openid-connect/auth".into(), tokenurl: "https://my-sso/auth/realms/my-realm/protocol/openid-connect/token".into(), };

html!( ) }

[function_component(MyApplicationMain)]

fn myappmain() -> Html { let agent = useauthagent().expect("Must be nested inside an OAuth2 component");

let login = { let agent = agent.clone(); Callback::from(move || { let _ = agent.startlogin(); }) }; let logout = Callback::from(move |_| { let _ = agent.logout(); });

html!( <>