用于安全用户帐户的通用django应用程序
django-safet的Python项目详细描述
generic django应用程序,以获得更安全的用户帐户。
功能
会话
- 用户可以看到所有活动会话
- 用户可以禁用给定的活动会话
- 用户可以禁用所有活动会话
强制更改密码
- 管理员可以要求任何用户更改密码
工作流
会话
- 用户登录
- 我们将逻辑连接到user_logged_in信号
- 我们创建了一个新的safety.models.Session实例
- 用户可以查看她的会话列表(包括IP、上次活动和设备信息)
- 用户可以删除列表中的给定会话
- 我们删除了商店中相关的safety.models.Session实例和相关会话
- 用户可以删除除当前会话之外的所有活动会话
- 我们以同样的方式进行:从存储中删除实例和相关会话
- 用户注销
- 我们将逻辑连接到user_logged_out信号
- 我们删除了相关的safety.models.Session实例
强制更改密码
- 管理员创建一个PasswordChange实例并将required设置为True
- 当用户登录时,它将被重定向到密码更改窗体
- 除非用户不更改密码,否则无权转到其他位置
- 用户更改其密码
- 现在授权它到别处去
安装
安装必备组件
必须在服务器上安装geoip库。
在带有自制程序的OS X上:
brew install geoip
您还需要geoip数据库。
对于django>;=1.9,请将城市和国家数据库下载为二进制(非csv):
http://dev.maxmind.com/geoip/geoip2/geolite2/
对于django 1.8,将城市和国家传统数据库下载为二进制(非csv):
http://dev.maxmind.com/geoip/legacy/geolite/
在需要的地方创建一个目录并解压缩这些存档文件 目录。完成后,设置指向此目录的GEOIP_PATH设置:
GEOIP_PATH='/absolute/path/to/maxmind/db/directory'
安装Django Safety
安装
$ pip install django-safety
在settings.py中,将safety添加到INSTALLED_APPS:
INSTALLED_APPS=(# Your other apps here.'safety',)
在urls.py中,在safety命名空间下包含safety.urls。
urlpatterns=[# Your other URLs here.url(r'^security/',include('safety.urls',namespace='safety')),]
同步数据库:
$ python manage.py migrate safety
太好了。会话功能已就绪。
如果要启用“强制更改密码”功能,请阅读下一页。
启用“强制更改密码”功能
要启用此功能,您有两个选择:
- 你只想保护特定的视图吗?使用password_change_required()decorator
- 你想保护你的整个应用程序吗?使用PasswordChangeMiddleware中间件
decorator作为任何django视图的decorator工作。
## In your urls.py#fromsafety.decoratorsimportpassword_change_requiredfrom.viewsimportprotect_meurlpatterns=[# Other URLs here.url(r'^protect-me/$',password_change_required(protect_me)),]## Or in your views.py (it's up to you)#fromdjango.shortcutsimportrenderfromsafety.decoratorsimportpassword_change_required@password_change_requireddefprotect_me(request):returnrender(request,'protect_me.html')
该中间件与任何django中间件一样工作。
将safety.middleware.PasswordChangeMiddleware中间件添加到settings.py:
MIDDLEWARE_CLASSES=['django.middleware.security.SecurityMiddleware','django.contrib.sessions.middleware.SessionMiddleware','django.middleware.common.CommonMiddleware','django.middleware.csrf.CsrfViewMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware','django.contrib.auth.middleware.SessionAuthenticationMiddleware','django.contrib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware','safety.middleware.PasswordChangeMiddleware',]
完成。
设置
Setting | Description |
---|---|
^{tt20}$ | The Python path to your own “login required” mixin class. Defaults to ^{tt21}$. |
^{tt22}$ | The Python path to your own IP resolver callable. Defaults to ^{tt23}$. |
^{tt24}$ | The Python path to your own device resolver callable. Defaults to ^{tt25}$. |
^{tt26}$ | The Python path to your own location resolver callable. Defaults to ^{tt27}$. |
开发
# Install pip and virtualenv $ sudo easy_install pip $ sudo pip install virtualenv # Clone repository $ git clone https://github.com/ulule/django-safety.git # Setup your development environment $ cd django-safety $ make devenv $ source .venv/bin/activate # Download GeoIP databases $ make geoip # Launch test suite $ make test# Launch test suite with tox to check compatibility $ tox # Run the example project (default user username is "johndoe") $ make example-migrate $ make example-user $ make example-serve
贡献
- 创建问题(before提交请求)
- 提交错误或功能请求
- 你想自己修复还是编写代码?伟大的!分叉项目
- 创建一个分支,总是添加测试并确保它们都通过了tox
- 提交拉取请求
兼容性
- Python2.7:django 1.8,1.9
- Python3.4:django 1.8,1.9
- Python3.5:django 1.8,1.9