Skip to main content

Sign in with Google

Project description

google-auth

Sign in with Google.

Installation

pip install reflex-google-auth

Usage

Create Google OAuth2 Client ID

Head over to https://console.developers.google.com/apis/credentials and sign in with the Google account that should manage the app and credential tokens.

  • Click "Create Project" and give it a name. After creation the new project should be selected.
  • Click "Configure Consent Screen", Choose "External", then Create.
    • Enter App Name and User Support Email -- these will be shown to users when logging in
    • Scroll all the way down to "Developer contact information" and add your email address, click "Save and Continue"
    • Click "Add or Remove Scopes"
      • Select "Email", "Profile", and "OpenID Connect"
      • Click "Update", then "Save and Continue"
    • Add any test users that should be able to log in during development.
  • From the "Credentials" page, click "+ Create Credentials", then "OAuth client ID"
  • Copy the OAuth "Client ID" and save it for later. Mine looks like 309209880368-4uqd9e44h7t4alhhdqn48pvvr63cc5j5.apps.googleusercontent.com

https://github.com/reflex-dev/reflex-examples/assets/1524005/af2499a6-0bda-4d60-b52b-4f51b7322fd5

Integrate with Reflex app

The GoogleAuthState provided by this component has a token_is_valid var that should be checked before returning any protected content.

Additionally the GoogleAuthState.tokeninfo dict contains the user's profile information.

from reflex_google_auth import GoogleAuthState, require_google_login


class State(GoogleAuthState):
    @rx.cached_var
    def protected_content(self) -> str:
        if self.token_is_valid:
            return f"This content can only be viewed by a logged in User. Nice to see you {self.tokeninfo['name']}"
        return "Not logged in."

The convenience decorator, require_google_login, can wrap an existing component, and show the "Sign in with Google" button if the user is not already authenticated. It can be used on a page function or any subcomponent function of the page.

The "Sign in with Google" button can also be displayed via google_login():

from reflex_google_auth import google_login, google_oauth_provider

def page():
    return rx.div(
        google_oauth_provider(
            google_login(),
        ),
    )

To uniquely identify a user, the GoogleAuthState.tokeninfo['sub'] field can be used.

See the example in masenf/rx_shout for how to integrate an authenticated Google user with other app-specific user data.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

reflex-google-auth-0.0.5.tar.gz (3.8 kB view hashes)

Uploaded Source

Built Distribution

reflex_google_auth-0.0.5-py3-none-any.whl (4.6 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page