From a1a4f80afad791404ebe00cb58a9bf62fdd0203f Mon Sep 17 00:00:00 2001 From: Daniel Vaz Gaspar Date: Mon, 25 Oct 2021 10:03:20 +0100 Subject: [PATCH] fix: OAuth login flow (#1707) * fix: OAuth login flow * simply flow * lint * add docs * add images --- docs/images/oauth_login.png | Bin 0 -> 82437 bytes docs/images/oauth_login_one_provider.png | Bin 0 -> 48690 bytes docs/security.rst | 31 ++++++++--- flask_appbuilder/security/views.py | 22 +++----- .../general/security/login_oauth.html | 52 ++++-------------- 5 files changed, 40 insertions(+), 65 deletions(-) create mode 100644 docs/images/oauth_login.png create mode 100644 docs/images/oauth_login_one_provider.png diff --git a/docs/images/oauth_login.png b/docs/images/oauth_login.png new file mode 100644 index 0000000000000000000000000000000000000000..5f9e9360d044cc7ca6264a5c880cbefd3c2d0105 GIT binary patch literal 82437 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 literal 0 HcmV?d00001 diff --git a/docs/images/oauth_login_one_provider.png b/docs/images/oauth_login_one_provider.png new file mode 100644 index 0000000000000000000000000000000000000000..51a84ddc778a4742a50b4cb089b489d25d0862fe GIT binary patch literal 48690 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 literal 0 HcmV?d00001 diff --git a/docs/security.rst b/docs/security.rst index bebaf15691..0573fbb231 100644 --- a/docs/security.rst +++ b/docs/security.rst @@ -151,15 +151,9 @@ You can give FlaskAppBuilder roles based on LDAP roles (note, this requires AUTH Authentication: OAuth --------------------- -This method will authenticate the user's credentials against an OAUTH provider. +This method will authenticate the user's credentials against an OAuth provider. -WARNING: To use OAuth you need to install `Python AuthLib `_. - -By using this method it is possible to use the OAUTH provider's APIs, this is because you're requesting the user to give -permission to manage the user's account on the provider. -Therefore, you can send tweets, post on the users Facebook, retrieve the user's LinkedIn profile etc. -Take a look at the `example `_ -to get an idea of a simple use for this. +.. note:: To use OAuth you need to install `Python AuthLib `_. Specify a list of OAUTH_PROVIDERS in **config.py** that you want to allow for your users:: @@ -269,11 +263,30 @@ To customize the userinfo retrieval, you can create your own method like this:: else: return {} +On Flask-AppBuilder 3.4.0 the login page has changed. + +With one provider: + +.. image:: ./images/oauth_login_one_provider.png + :width: 100% + +With multiple providers: + +.. image:: ./images/oauth_login.png + :width: 100% + +Note that on 3.3.X the user would automatically be sent to the provider allow page. + Decorate your method with the SecurityManager **oauth_user_info_getter** decorator. -Your method should return a dictionary with the userinfo, the keys having the same column names as the User Model. +Your method should return a dictionary with the userinfo, with the keys having the same column names as the User Model. Your method will be called after the user authorizes your application on the OAuth provider. Take a look at the `example `_ +You can also use the OAuth provider APIs. +Therefore, you can send tweets, post on the users Facebook, retrieve the user's LinkedIn profile etc. +Take a look at the `example `_ +to get an idea of a simple use for this. + Role based ---------- diff --git a/flask_appbuilder/security/views.py b/flask_appbuilder/security/views.py index 26854a6952..6dda50969d 100644 --- a/flask_appbuilder/security/views.py +++ b/flask_appbuilder/security/views.py @@ -595,24 +595,19 @@ class AuthOAuthView(AuthView): @expose("/login/") @expose("/login/") @expose("/login//") - def login( - self, provider: Optional[str] = None, register: Optional[str] = None - ) -> WerkzeugResponse: + def login(self, provider: Optional[str] = None) -> WerkzeugResponse: log.debug("Provider: {0}".format(provider)) if g.user is not None and g.user.is_authenticated: log.debug("Already authenticated {0}".format(g.user)) return redirect(self.appbuilder.get_url_for_index) if provider is None: - if len(self.appbuilder.sm.oauth_providers) > 1: - return self.render_template( - self.login_template, - providers=self.appbuilder.sm.oauth_providers, - title=self.title, - appbuilder=self.appbuilder, - ) - else: - provider = self.appbuilder.sm.oauth_providers[0]["name"] + return self.render_template( + self.login_template, + providers=self.appbuilder.sm.oauth_providers, + title=self.title, + appbuilder=self.appbuilder, + ) log.debug("Going to call authorize for: {0}".format(provider)) state = jwt.encode( @@ -621,9 +616,6 @@ def login( algorithm="HS256", ) try: - if register: - log.debug("Login to Register") - session["register"] = True if provider == "twitter": return self.appbuilder.sm.oauth_remotes[provider].authorize_redirect( redirect_uri=url_for( diff --git a/flask_appbuilder/templates/appbuilder/general/security/login_oauth.html b/flask_appbuilder/templates/appbuilder/general/security/login_oauth.html index 98cfbc0fba..21d8a6dd56 100644 --- a/flask_appbuilder/templates/appbuilder/general/security/login_oauth.html +++ b/flask_appbuilder/templates/appbuilder/general/security/login_oauth.html @@ -4,33 +4,13 @@ {% block content %}
@@ -40,31 +20,21 @@
{{ title }}
- {% endblock %} \ No newline at end of file