Récemment, j'ai intégré sur-ensemble avec mon application web de sorte que lorsqu'un utilisateur qui est authentifié par mon application web peut entrer sur-ensemble et de visualiser/éditer/créer des tableaux de bord en fonction de leur rôle, simplement en cliquant sur le lien même pas besoin de connexion. Pour ce faire, je devais contourner le login pour laquelle j'ai renvoyé cet article.
Personnalisé SecurityManager j'ai utilisé pour contourner la connexion
class CustomAuthDBView(AuthDBView):
@expose('/login/', methods=['GET', 'POST'])
def login(self):
redirect_url = self.appbuilder.get_url_for_index
user_name = request.args.get('username')
user_role = request.args.get('role')
if user_name is not None:
user = self.appbuilder.sm.find_user(username=user_name)
if not user:
role = self.appbuilder.sm.find_role(user_role)
user = self.appbuilder.sm.add_user(user_name, user_name, 'last_name', user_name + "@domain.com", role, password = "password")
if user:
login_user(user, remember=False)
return redirect(redirect_url)
else:
print('Unable to auto login', 'warning')
return super(CustomAuthDBView,self).login()
class CustomSecurityManager(SupersetSecurityManager):
authdbview = CustomAuthDBView
def __init__(self, appbuilder):
super(CustomSecurityManager, self).__init__(appbuilder)
Ainsi, selon le code ci-dessus en utilisant l'url http://localhost:8088/login?username=John
se connecte l'utilisateur John en interne ou si l'utilisateur John n'existe pas de compte est créé avec un rôle qui est basée sur le rôle de l'utilisateur dans mon application web
Maintenant, le problème est une personne qui peut deviner cette url http://localhost:8088/login?username=USER_NAME
peuvent créer leur compte en superset, alors comment protéger ou assurer cette '/login'
point de terminaison