加密URL中的信息,如登录凭据。如果要向用户发送一个链接,该链接可登录用户而不泄漏其登录凭据,则会很有用。

django-urlcrypt的Python项目详细描述


django urlcrypt加密url中的信息,例如登录凭据。

例如,假设我有如下的url模式:

urlpatterns = patterns('',
    url(r'^inbox/$', 'message_inbox', name='message_inbox'),
    (r'^r/', include('urlcrypt.urls')),
)

我可以使用django urlcrypt为用户生成一个url,它看起来像:

http://www.mydomain.com/r/TkNJBkNFAghDWkdFGPUAQEfcDUJfEBIREgEUFl1BQ18IQkdDUUcPSh4ADAYAWhYKHh8KHBsHEw

并将自动登录该用户并将其重定向到/inbox/

安装

  1. easy_install django-urlcryptpip install django-urlcrypt

  2. urlcrypt添加到INSTALLED_APPS

  3. 在settings.py中,将'urlcrypt.auth_backends.UrlCryptBackend'添加到AUTHENTICATION_BACKENDS

  4. 在url.py中添加:

    (r'^r/', include('urlcrypt.urls')),
    
  5. (推荐)如果您希望在令牌上使用rsa加密,请使用ssh-keygen-t rsa -f <path to private key>生成一个私钥(如果您还没有),然后将私钥的路径设置为urlcrypt_private_key_path。rsa加密使令牌更长,但更安全。需要pycrypto库。

用法

在视图中:

from django.core.urlresolvers import reverse
from urlcrypt import lib as urlcrypt

token = urlcrypt.generate_login_token(user, reverse('message_inbox'))
encoded_url = reverse('urlcrypt_redirect', args=(token,))
# yours will look slightly different because you have a different SECRET_KEY, but approximately
# encoded_url == /r/TkNJBkNFAghDWkdFGPUAQEfcDUJfEBIREgEUFl1BQ18IQkdDUUcPSh4ADAYAWhYKHh8KHBsHEw

在模板中:

{% load urlcrypt_tags %}
<a href="{% encoded_url user message_inbox %}">click me to log in as {{user.username}} and go to {% url message_inbox %}</a>

高级库用法:

from urlcrypt import lib as urlcrypt

message = {
    'url': u'/users/following/',
    'user_id': '12345'
}

token = urlcrypt.encode_token((message['user_id'], message['url']))
decoded_message = urlcrypt.decode_token(token, ('user_id', 'url', 'timestamp'))

>>> print token
TkNJBkNFAghDWkdFGPUAQEfcDUJfEBIREgEUFl1BQ18IQkdDUUcPSh4ADAYAWhYKHh8KHBsHEw

>>> print decoded_message
{'url': '/users/following/', 'user_id': '12345'}

设置

  • ^{tt10}$
    • default: ^{tt11}$
    • If urlcrypt authentication fails, redirects to ^{tt10}$.
  • ^{tt13}$
    • default: ^{tt14}$
    • The number of urlcrypt requests a unique visitor is allowed to make per minute.
  • ^{tt15}$
    • default: ^{tt16}$
    • The path to the RSA private key file in PEM format. If ^{tt16}$, RSA encryption will not be used.
  • ^{tt18}$
    • default: ^{tt19}$
    • Set ^{tt18}$ to True when running the urlcrypt tests.

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

推荐PyPI第三方库


热门话题
java需要一种简单的方法来创建用于排序的comparator类   java getReadableDatabase和getWriteableDatabase无法解析   查找列表<Long>中与某个元素对应的所有索引的java方法   安卓将视图添加到ViewFlipper会导致java。StackOverflowerr语言   java根据它所包含的长“curTime”类字段将N的列表拆分为24(小时)   Android N中的Java8流API   自动生成Java策略文件的安全性   垃圾收集鼓励Java中的主要GC(但不是STW GC)   java如何检查UDP服务器上侦听的客户端数量   在前一台主机被Datastax Java驱动程序关闭后,Cassandra尝试重新连接到下一台主机   java如何使用Spring Boot创建部分代理   java是否有一个网站或资源可以完全比较EJB版本   java无需使用第三方库从gradle生成输出   继承由于这个多态性的基本示例中的语法有什么不同吗?(爪哇)   java字符串数组中的空字符串   java为什么CMS中的初始标记阶段是串行的   为什么Lucene有时与InChIKeys不匹配?   安卓通知Java应用程序数据库中的更改   java如何将单个json对象值解析为按钮   java打印堆栈将运行时错误跟踪到文件