如何在同一应用程序中具有两个登录/身份验证策略?

约翰国王

我有一个标准的金字塔应用程序。__init__.pymain方法中,我必须config.add_request_method(AuthHelper.get_user, 'user', reify=True)设置一个可全局访问的用户对象。

我将所有用户存储在一个user表中,并通过访问当前登录的用户self.request.user我的问题是,我想创建一个与应用程序其余部分完全分开的管理门户,并且希望将这些“管理员”存储在名为的表中admin这些管理员不是用户-他们具有单独的登录页面,并且与user表没有任何关系。

我在为管理员设置授权时遇到麻烦。例如,remember(self.request, admin.id, max_age=...就身份验证而言,无法区分成功登录的用户和成功登录的admin。即使A在不同的视图上使用不同的凭据登录,也User.id = 1可以访问的管理门户Admin.id == 1

我曾考虑过Admin.usernameremember方法中使用,但仍然与config.add_request_method(AuthHelper.get_user...)(可以理解)相冲突,后者采用User.id

如何设置授权策略,以便如果您从Admin门户登录名成功登录,则您的授权与从主索引页面登录的普通用户是分开的,反之亦然?

我觉得这是一个相对基本的需求,因此我必须缺少实现此目的的简单方法。谢谢。

谢尔盖

对于“管理门户,与应用程序的其余部分完全分开”,一个选项是设置单独的WSGI应用程序,该应用程序将具有单独的request对象,身份验证策略等。

然后,您可以将两个应用程序与WSGI“ composite”组合在一起,这样就可以安装“普通”应用程序,/并且可以打开admin /admin

您仍然可以从管理应用程序导入相同的代码(模型甚至视图)-基本上,这是添加另一个“启动”文件(其中包含return config.make_wsgi_app())并配置.ini文件的问题。

如果您在管理应用程序中更改cookie名称,您甚至可以在“主”应用程序中以用户身份在“管理门户”中以管理员身份登录:

authn_policy = AuthTktAuthenticationPolicy(
    ...
    cookie_name='admin_auth_tkt',
    ...)
authz_policy = ACLAuthorizationPolicy()
config.set_authentication_policy(authn_policy)
config.set_authorization_policy(authz_policy)

您需要文件中定义一个入口点setup.py

  entry_points="""\
      [paste.app_factory]
      main = MyApp:main_app
      admin = MyApp:admin_app
  """

main_app并且admin_app应该是可从导入的函数myapp,它们将返回相应的WSGI应用程序)。

然后,您可以组装一个复合材料:

[composite:main]
use = egg:Paste#urlmap
/ = mainapp
/files = adminapp

[app:mainapp]
use = egg:MyApp#main

[app:adminapp]
use = egg:MyApp#admin

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在同一个应用程序中具有两个登录名/身份验证策略?

来自分类Dev

如何设置两个域以指向具有乘客但具有不同Rails功能的同一应用程序?

来自分类Dev

如何在两个 asp.net 应用程序之间共享身份验证

来自分类Dev

Asp.net通过同一域中的两个应用程序共享表单身份验证

来自分类Dev

ASP.NET共享通过同一域中的两个应用程序进行身份验证

来自分类Dev

如何使用python关闭同一应用程序的两个窗口?

来自分类Dev

在同一应用程序中启动两个Windows服务

来自分类Dev

同一应用程序上的AAD OpenId和承载身份验证

来自分类Dev

FB朋友列表已对同一应用程序进行了身份验证

来自分类Dev

如何为两个Kinects运行同一应用程序的两个实例?

来自分类Dev

Rails对两个应用程序使用一个身份验证系统

来自分类Dev

在flutter应用程序中的Firebase身份验证中合并两个uid

来自分类Dev

在MBean注册中,在同一应用程序中运行两个Tomcat服务器失败

来自分类Dev

安装时设备上的同一应用程序显示两个图标

来自分类Dev

构建同一应用程序的两个版本

来自分类Dev

Android:初始化时,同一应用程序的两个Aplication类实例

来自分类Dev

是否可以安装同一应用程序的两个实例?

来自分类Dev

无法在同一服务器上的两个分离的CakePHP应用程序上进行身份验证

来自分类Dev

如何在IIS上发布具有表单身份验证的MVC应用程序

来自分类Dev

身份:在两个不同的asp.net mvc5应用程序中的身份验证

来自分类Dev

在同一应用程序上使用两个Facebook应用程序ID进行测试

来自分类Dev

在同一应用程序上使用两个Facebook应用程序ID进行测试

来自分类Dev

同一台机器上具有相同证书的两个服务之间的相互身份验证

来自分类Dev

Wordpress 如何在现有应用程序中对用户进行身份验证?

来自分类Dev

如何在同一个Angular JS应用程序中将不同的API与不同的身份验证标头一起使用

来自分类Dev

不允许在kubernetes中的同一节点上使用同一应用程序的两个Pod

来自分类Dev

UserDefaults 在同一应用程序组中具有不同的值

来自分类Dev

只有一个用户无法通过Google ID身份验证登录到应用程序

来自分类Dev

使用Spring Security对两个应用程序进行基于相同表单的身份验证

Related 相关文章

  1. 1

    如何在同一个应用程序中具有两个登录名/身份验证策略?

  2. 2

    如何设置两个域以指向具有乘客但具有不同Rails功能的同一应用程序?

  3. 3

    如何在两个 asp.net 应用程序之间共享身份验证

  4. 4

    Asp.net通过同一域中的两个应用程序共享表单身份验证

  5. 5

    ASP.NET共享通过同一域中的两个应用程序进行身份验证

  6. 6

    如何使用python关闭同一应用程序的两个窗口?

  7. 7

    在同一应用程序中启动两个Windows服务

  8. 8

    同一应用程序上的AAD OpenId和承载身份验证

  9. 9

    FB朋友列表已对同一应用程序进行了身份验证

  10. 10

    如何为两个Kinects运行同一应用程序的两个实例?

  11. 11

    Rails对两个应用程序使用一个身份验证系统

  12. 12

    在flutter应用程序中的Firebase身份验证中合并两个uid

  13. 13

    在MBean注册中,在同一应用程序中运行两个Tomcat服务器失败

  14. 14

    安装时设备上的同一应用程序显示两个图标

  15. 15

    构建同一应用程序的两个版本

  16. 16

    Android:初始化时,同一应用程序的两个Aplication类实例

  17. 17

    是否可以安装同一应用程序的两个实例?

  18. 18

    无法在同一服务器上的两个分离的CakePHP应用程序上进行身份验证

  19. 19

    如何在IIS上发布具有表单身份验证的MVC应用程序

  20. 20

    身份:在两个不同的asp.net mvc5应用程序中的身份验证

  21. 21

    在同一应用程序上使用两个Facebook应用程序ID进行测试

  22. 22

    在同一应用程序上使用两个Facebook应用程序ID进行测试

  23. 23

    同一台机器上具有相同证书的两个服务之间的相互身份验证

  24. 24

    Wordpress 如何在现有应用程序中对用户进行身份验证?

  25. 25

    如何在同一个Angular JS应用程序中将不同的API与不同的身份验证标头一起使用

  26. 26

    不允许在kubernetes中的同一节点上使用同一应用程序的两个Pod

  27. 27

    UserDefaults 在同一应用程序组中具有不同的值

  28. 28

    只有一个用户无法通过Google ID身份验证登录到应用程序

  29. 29

    使用Spring Security对两个应用程序进行基于相同表单的身份验证

热门标签

归档