金字塔Web应用程序的基于会话的身份验证和基于角色的安全性。

pyramid_simpleauth的Python项目详细描述


[![构建状态](https://travis-ci.org/thruflo/pyramid_simpleauth.svg?branch=master)](https://travis ci.org/thruflo/pyramid_simpleauth)

[pyramid_simpleauth][]是一个为[pyramid][]Web应用程序实现基于会话的身份验证和基于角色的安全性的包。

pyramid还有许多其他的身份验证实现,包括[apex][]和
[金字塔注册][]当然,您也可以轻松地滚动您自己的,例如
跟随优秀的[金字塔认证][]。此包的目标是:

*相对简单:具有有限的功能集
*可扩展:具有事件挂钩和可重写模板
*性能:最小化数据库查询

关闭您的应用程序并在以下位置公开视图:

*/auth/signup
*/auth/login
*/auth/authenticate(通过ajax登录)
*/auth/logout
*/auth/change\'u username
*/auth/change\'u password
*/auth/confirm(电子邮件确认)
*/auth/prefere\'u email(将电子邮件设置为用户的p引用的电子邮件)

gedpassword`,
`userchangedusername`,`emailpreferred`和`emailaddressconfirmed`事件订阅:

@subscriber(usersignedup)
def my_event_handler(event):
request=event.request
user=event.user


"request.is_post_login"和"request.is_post_signup"的标志,存储在会话中,
允许您测试当前请求是在登录后立即发出还是在注册事件后发出。以及"request.user_json"属性(用于写入模板
以将数据传递到客户端)。


`model.get_confirmation_link(request,email)`returns a`confirmation_link`
将被`/auth/confirm`接受,并且通常可以包含在
发送到U的电子邮件中希望验证电子邮件地址的用户。

vent.data['email'].address
session=event.request.session
session.flash("%s已成功确认为电子邮件地址)"




在金字塔应用程序的配置部分包括包和会话工厂、"金字塔"和"金字塔"基本模型:
配置会话工厂,这里,我们使用"金字塔烧杯"。
config.include("金字塔烧杯")
config.set\u session工厂(SESession_factory_from_settings(settings))

sqlalchemy建模并将"session"的作用域限定为数据库引擎。
config.include('pyramid_-basemodel')

include包。
config.include('pyramid_-simpleauth')

您可以重写此基本布局模板,方法是编写自己的模板,例如:

u包:my_templates/layout.mako
<;!doctype html>;
<;html>;
<;head>;
<;title>;${self.subtitle()}<;/title>;
<;link href="my_great.cs"s" rel="stylesheet"type="text/css"/>;
<;/head>;
<;body>;
<;div class="My Great Markup">;
${next.body()}
<;/duv>;
<;/body>;
<;/html>;


操作使用,例如:

config.override廑asset(to廑override='pyramid廑simpleauth:templates/layout.mako',
override廑u with='my廑package:my廑templates/layout.mako')


或者您可以直接使用nuke注册和登录模板,例如:

config.override廑asset(to_ override='pyramid_simpleauth:templates/signup.mako',
override_with='my_package:my_templates/foo.mako')
config.override_asset(to_override='pyramid_simpleauth:templates/login.mako',
override_with='my_package:my_templates/bar.mako')。

若要更改身份验证视图的URL路径,请在应用程序的".ini"配置中指定
`simpleauth.url戡前缀:

这里重定向到注册后、登录后、注销后、用户名
更改、密码更改、电子邮件确认或首选电子邮件选择。这些
都是使用*route name s*配置的,其中route被提供用户用户名的
附加遍历信息和可选视图
名称。(这意味着您可以根据自己的喜好公开一个简单的命名路由或混合路由。混合路由将尝试遍历用户名。

impleauth.after_logout_route='another'默认为'index'


请注意,传递到登录页、密码
更改页、用户名更改页、电子邮件确认页或首选电子邮件的'next'参数将优先于特定路由。

在登录、更改密码、用户名
更改、电子邮件确认或首选电子邮件选择后,直接转到其他路由并查看,使用配置
指令,例如:

simpleauth.after_confirm_email_route='basepath';默认为'users'
simpleauth.after_confirm_email_view='viewname',默认为'account'

这会将用户bob重定向到`/basepath/bob/viewname`。重定向配置
每个视图的指令都按照模式命名
`simpleauth.after\ult;view\u name>;`u route`和`simpleauth.after\ult;view\u name>;`u view`,
`where`<;view\u name>;`可以是'login`,`change\u username`,
`change\u password`,`confirm\u email`以及"首选电子邮件"。

要成为alice,重定向将导致一个"page not found"
错误。在这种情况下,如果要在自定义重定向中包含用户名,
应使用基于配置的重定向位置,并将新用户名考虑在内。


默认情况下,应用程序在注册到名为"users"的路由后重定向。默认情况下,这是
不由"pyramid\u simpleauth"公开的,但包确实提供了一个
`.tree.user root`根工厂,用于查找'.model.user's by username和'.model.user'类上的
default` acl`属性。这些完全是可选的:您可以选择使用不同的命名路由,或者使用以下方法公开一个简单的命名路由,例如:


config.add_route('users','some/path')

提供了一些新的安全性
和遍历功能,您可以在
`/users/:username`中使用,例如:

use戋global戋views=true)向无效配置授权和身份验证策略(例如,如果您要自己设置这些策略),请使用:


simpleauth.set_auth_policies=false

,以避免通过默认设置(安全但可能苛刻)锁定应用程序以要求对所有视图具有"查看"权限n):

simpleauth.set_default_permission=false

它应该在
python 3下工作,但在python3下安装"passlib"依赖项(或任何合适的密码加密库)时遇到问题。

您需要"nose"、"coverage"、"mock"和"webtest"。然后,例如:


$noestests--cover package=pyramid廑simpleauth--cover tests--with doctest--with coverage
……………
-
金字塔简单19 0 100%
金字塔简单事件26 0 100%
金字塔简单挂钩13 0 100%
金字塔简单模型56 0 100%
金字塔简单模式83 0 100%
棱锥图。测试197 0 100%
棱锥图。树18 0 100%
棱锥图。视图76 0 100%
总长度488 0 100%
-----------------------------------
在16.408s中运行了42个测试


[apex]:https://github.com/cd34/apex
[pyramid]:http://pyramid.readthedocs.org
[pyramid-auth-demo]:https://github.com/mmerickel/pyramid-auth-demo
[pyr中间注册:https://github.com/sontek/pyramid注册
[金字塔简单化]:http://github.com/thruflo/pyramid简单化

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java将数据从UI传递到数据库JSF、JPA等   静态和非静态的java错误   java Hibernate打开会话两次,需要事务   泛型对于这个简单的Java层次结构问题,我的最佳方法是什么?   googleappengine上的javasqlite   java如何实现或找到threadsafe CompletionService的等价物?   java类访问不同线程上的父类   调用SQLException时发生java RuntimeException。getMessage()(DB2)   java JTree:可变行高   链表编写一种方法,以升序对单个linkedlist进行排序(java)   java将TileMap加载到stage类libgdx中   java如何将数据正确添加到嵌套hashmap