在flask-stormpath中,如何根据用户的Stormpath组

时间:2017-02-14 20:09:17

标签: python flask flask-login stormpath

问题陈述

我正在使用Stormpath进行身份验证的烧瓶应用。在我的应用中,我有两个用户组:normal usersadmins。用户登录后,我想根据他们所属的群组将其重定向到特定页面。因此,如果用户是普通用户,他们会被重定向到/dashboard,如果他们是管理员,则会将他们重定向到/admin_dashboard。截至目前,我有STORMPATH_REDIRECT_URL = '/dashboard'所以每次登录时,无论他们属于哪个群组,他们都会被重定向到/dashboard如何根据Stormpath组将其重定向到特定页面?

当前代码片段:

注意:我使用默认的Flask-Stormpath登录视图,该应用程序允许通过Google进行社交登录。

/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")

1 个答案:

答案 0 :(得分:0)

<强>解

flask_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")