在flaskstormpath中,如何根据用户的Stormpath组在登录后将用户路由到特定页面

2024-04-28 21:45:01 发布

您现在位置:Python中文网/ 问答频道 /正文

问题陈述

我正在开发一个flask应用程序,它使用Stormpath进行身份验证。在我的应用程序中,我有两个用户组:normal usersadmins。用户登录后,我想根据他们所属的组将他们重定向到特定页面。因此,如果用户是普通用户,他们将被重定向到/dashboard,如果他们是管理员,他们将被重定向到/admin_dashboard。到目前为止,我有STORMPATH_REDIRECT_URL = '/dashboard',所以每次他们登录时都会被重定向到/dashboard,而不管他们属于哪个组。如何根据他们的Stormpath组将他们重定向到特定页面?

当前代码片段:

注意:我使用的是默认路径登录视图,该应用程序允许通过谷歌进行社交登录。你知道吗

/app/__init__.py:

def create_app(config_name):
  ...
  # App config here
  ...
  stormpath_manager = StormpathManager()
  stormpath_manager.init_app(app)
  ...
  return app

/config.py:

class Config(Object):
  ...
  STORMPATH_REDIRECT_URL = '/dashboard'
  ...

/app/dashboard/views.py:

@dashboard_blueprint.route('/dashboard')
@login_required
@groups_required(['normal-users'])
def dashboard():
  return render_template('dashboard/index.html', title="Dashboard")

@dashboard_blueprint.route('/admin_dashboard')
@login_required
@groups_required(['admins'])
def admin_dashboard():
  return render_template('dashboard/admin_index.html', title="Admin Dashboard")

Tags: 用户pyconfigapp应用程序returnadmindef
1条回答
网友
1楼 · 发布于 2024-04-28 21:45:01

解决方案

flask\u stormpath有一个User类,如here所示,它接受一个Account作为参数。从stormpath-sdk-python,我们可以看到一个Account有一个has_group(self, resolvable)函数,如here。你知道吗

因此,为了在用户登录后显示特定页面,根据用户所属的组,我对/app/dashboard/views.py进行了以下更改,同时保持其他页面不变:

from flask_stormpath import User
from flask_stormpath import current_user

@dashboard_blueprint.route('/dashboard')
@login_required
def dashboard():
  if User.has_group(current_user, 'normal-users'):
    return render_template('dashboard/index.html', title="Dashboard")
  elif User.has_group(current_user, 'admins'):
    return render_template('dashboard/admin_index.html', title="Admin Dashboard")
  else:
      return render_template('dashboard/error.html', title="Error Page")

相关问题 更多 >