跳转到主要内容

适用于更安全用户账户的通用Django应用程序

项目描述

Build Status

适用于更安全用户账户的通用Django应用程序。

特性

会话

  • 用户可以查看所有活动会话

  • 用户可以禁用一个特定的活动会话

  • 用户可以禁用所有活动会话

强制密码更改

  • 管理员可以要求任何用户更改密码

工作流程

会话

  1. 用户登录

  2. 我们将逻辑连接到user_logged_in信号

  3. 我们创建一个新的safety.models.Session实例

  4. 用户可以看到她的会话列表(包含IP、最后活动和设备信息)

  5. 用户可以从列表中删除一个特定的会话

  6. 我们删除相关的safety.models.Session实例和存储中的相关会话

  7. 用户可以删除除当前会话之外的所有活动会话

  8. 我们以相同的方式处理:从存储中删除实例和相关会话

  9. 用户登出

  10. 我们将逻辑连接到user_logged_out信号

  11. 我们删除相关的safety.models.Session实例

强制密码更改

  1. 管理员创建一个PasswordChange实例,并将required设置为True

  2. 当用户登录时,它将被重定向到密码更改表单

  3. 直到用户更改密码,它将不被授权访问其他地方

  4. 用户更改密码

  5. 现在它被授权访问其他地方

安装

安装前提条件

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

贡献

  1. 创建一个问题(在提交拉取请求之前)

  2. 提交您的错误或功能请求

  3. 您想自己修复或编写代码?太好了!对项目进行分叉

  4. 创建一个分支,始终添加测试,并确保它们都能通过 tox

  5. 提交一个拉取请求

兼容性

  • 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 (13.2 kB 查看哈希值)

上传时间

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面