Crate yew_oauth2

source ·
Expand description

Yew components to implement OAuth2 and OpenID Connect logins.

§OAuth2 or Open ID Connect

This crate supports both plain OAuth2 and Open ID Connect (OIDC). OIDC layers a few features on top of OAuth2 (like logout URLs, discovery, …).

In order to use OIDC, you will need to enable the feature openid.

§Example

NOTE: Also see the readme for more examples.

The following is a basic example:

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

#[function_component(MyApplication)]
fn my_app() -> Html {
  let config = Config::new(
    "my-client",
    "https://my-sso/auth/realms/my-realm/protocol/openid-connect/auth",
    "https://my-sso/auth/realms/my-realm/protocol/openid-connect/token"
  );

  html!(
    <OAuth2 {config}>
      <MyApplicationMain/>
    </OAuth2>
  )
}

#[function_component(MyApplicationMain)]
fn my_app_main() -> Html {
  let agent = use_auth_agent().expect("Must be nested inside an OAuth2 component");

  let login = use_callback(agent.clone(), |_, agent| {
    let _ = agent.start_login();
  });
  let logout = use_callback(agent, |_, agent| {
    let _ = agent.logout();
  });

  html!(
    <>
      <Failure><FailureMessage/></Failure>
      <Authenticated>
        <button onclick={logout}>{ "Logout" }</button>
      </Authenticated>
      <NotAuthenticated>
        <button onclick={login}>{ "Login" }</button>
      </NotAuthenticated>
    </>
  )
}

Modules§

  • The agent, working in the background to manage the session and refresh tokens.
  • Components used when rendering HTML
  • Configuration
  • The Authentication Context
  • Hooks for Yew
  • Common used OAuth2 features
  • openidopenid
    Common used Open ID Connect features
  • The prelude, includes most things you will need.