适用于更安全用户账户的通用Django应用程序
项目描述
适用于更安全用户账户的通用Django应用程序。
特性
会话
用户可以查看所有活动会话
用户可以禁用一个特定的活动会话
用户可以禁用所有活动会话
强制密码更改
管理员可以要求任何用户更改密码
工作流程
会话
用户登录
我们将逻辑连接到user_logged_in信号
我们创建一个新的safety.models.Session实例
用户可以看到她的会话列表(包含IP、最后活动和设备信息)
用户可以从列表中删除一个特定的会话
我们删除相关的safety.models.Session实例和存储中的相关会话
用户可以删除除当前会话之外的所有活动会话
我们以相同的方式处理:从存储中删除实例和相关会话
用户登出
我们将逻辑连接到user_logged_out信号
我们删除相关的safety.models.Session实例
强制密码更改
管理员创建一个PasswordChange实例,并将required设置为True
当用户登录时,它将被重定向到密码更改表单
直到用户更改密码,它将不被授权访问其他地方
用户更改密码
现在它被授权访问其他地方
安装
安装前提条件
GeoIP库必须安装到您的服务器上。
在OS X上使用Homebrew
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() 装饰器
您想保护整个应用程序?使用 PasswordChangeMiddleware 中间件
装饰器的工作方式与任何Django视图装饰器相同。
#
# In your urls.py
#
from safety.decorators import password_change_required
from .views import protect_me
urlpatterns = [
# Other URLs here.
url(r'^protect-me/$', password_change_required(protect_me)),
]
#
# Or in your views.py (it's up to you)
#
from django.shortcuts import render
from safety.decorators import password_change_required
@password_change_required
def protect_me(request):
return render(request, 'protect_me.html')
中间件的工作方式与任何Django中间件相同。
在您的 settings.py 文件中添加 safety.middleware.PasswordChangeMiddleware 中间件
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',
]
完成。
设置
设置 |
描述 |
---|---|
SAFETY_LOGIN_REQUIRED_MIXIN_CLASS |
您自己的“登录所需”混合类所在的Python路径。默认为 safety.mixins.LoginRequiredMixin。 |
SAFETY_IP_RESOLVER |
您自己的IP解析器可调用对象所在的Python路径。默认为 safety.resolvers.remote_addr_ip。 |
SAFETY_DEVICE_RESOLVER |
您自己的设备解析器可调用对象所在的Python路径。默认为 safety.resolvers.device。 |
SAFETY_LOCATION_RESOLVER |
您自己的位置解析器可调用对象所在的Python路径。默认为 safety.resolvers.location。 |
开发
# 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
贡献
创建一个问题(在提交拉取请求之前)
提交您的错误或功能请求
您想自己修复或编写代码?太好了!对项目进行分叉
创建一个分支,始终添加测试,并确保它们都能通过 tox
提交一个拉取请求
兼容性
python 2.7: Django 1.8, 1.9
Python 3.4: Django 1.8, 1.9
Python 3.5: Django 1.8, 1.9
项目详情
django-safety-0.1.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c00378bdf74988cb562206b3825bcfaba6addd3d9ebdff9f8edb9e2f27ac143b |
|
MD5 | b699d628d91b4749140c18e945e6bc31 |
|
BLAKE2b-256 | 49f32e8e2f9fad5bd1abe4a3792fe7e12be28f32ae6c059291f75968b5251db1 |