很好的二维码,允许用户在移动设备上即时登录网站

django-qrauth的Python项目详细描述


什么是django qrauth?
==


django qrauth允许您通过即时用户身份验证轻松地为您的网站增添趣味:用户登录Mac或PC后,他们可以拿起智能手机(或平板电脑、iPod等:实际上,任何可以上网的东西、相机和二维码扫描应用程序应该可以工作),扫描一个二维码(在用户点击相应链接后显示在屏幕上),然后立即登录他们的智能手机或其他移动设备(这样他们就不必输入站点地址、登录名/电子邮件和密码)。

![截图:扫描Android手机上的认证二维码](例如.png"扫描Android手机上的认证二维码")


您可以在[此屏幕广播](http://www.youtube.com/watch)中看到详细的演练。v=6ob3or_frhk)(俄语)和[本博客文章](http://habrahabr.ru/post/181093/)(俄语)。

/).

步骤2
----


install django qrauth:



步骤3
----


打开模板目录并添加以下模板:qrauth/invalid_code.html和qrauth/page.html。例如:

**qrauth/invalid廑code.html**

{%extends"base.html"%}

{%block title%}无效的二维码{%endblock%}

{%block content%}
<;div class="error">;
<;h1>;无效的二维码<;h1>;
<;p>;二维码您用于身份验证的无效。请尝试再次打开带有二维码的页,然后重新扫描。<;/p>;
<;/div>;
{%endblock%}

**qrouth/page.html**

{%extends"base.html"%}

{%block title%}验证二维码{%endblock%}

{%block content%}
<;div class="qr\u code">;
<;h1>;验证二维码<;/h1>;
<;p>;扫描此二维码以立即登录到移动设备(智能手机、平板电脑等)上的网站:<;/p>;
<;div>;<;img src="{%url"验证二维码"验证码%"t="qr">;<;div>;
<;p>;每个生成的二维码只工作一次,并且只工作5分钟。如果您需要另一个二维码,只需再次打开此页并包括使用的URL即可。通过qrauth应用程序:

url patterns=patterns('',
默认情况下,每个二维码有效期为300秒(5分钟)。如果要更改此行为,请更改"验证码过期时间"设置的值。验证码过期时间以秒为单位。例如:

auth_qru code_expiration_time=600 10分钟

例如:

auth_qru code_redirect_url="/welcome/"


默认情况下,用户被重定向到"/"(通常是索引页)。

如果需要指定自定义的redis连接设置,可以使用auth_qru code_redis_kwargs设置。它是初始化redis连接时传递给redis.strictredis类的关键字参数字典。例如:

auth_qru code_redis_kwargs={
"主机":"本地主机",
"端口":6379,
"db":0,
}


另外,请确保[登录URL](https://docs.djangoproject.com/en/dev/ref/settings/登录URL)具有正确的值。否则,可以将用户重定向到不存在的页面(例如,如果未经身份验证的用户尝试使用二维码打开该页面)。


如何测试
==


如果要在本地测试该页面,请确保您的本地Web服务器可从移动数据终端访问。罪恶。例如,如果计算机和移动设备都连接到同一个LAN,则应指定LAN IP地址(例如192.168.0.5:8000或0.0.0:8000,如果希望Web服务器侦听所有网络接口),以便使Web服务器侦听此地址。

如果使用[站点"框架](https://docs.djangoproject.com/en/dev/ref/contrib/sites/)(django.contrib.sites),请确保已正确设置当前站点的域。

T 8000,域名应该是192.168.0.5:8000。您可以在管理界面(/admin/sites/site/)中设置它。

开发服务器正在监听环回接口和LAN接口,您应该使用LAN IP地址打开网站(否则您的移动设备将无法浏览到身份验证URL,因为环回接口的IP将在链接中使用)。

o尝试二维码验证。请确保您已登录,浏览到/qr/(如果您在根urlconf中指定了其他路径),拿起移动设备并尝试扫描它。

当您在Web浏览器中实际打开URL时,ODE将变为无效。在这种情况下,请尝试更改二维码扫描应用程序的设置。


如果网站上存在XSS漏洞,则攻击者可以使用iframes(至少在未将[x-frame-options]头设置为deny的情况下)(https://developer.mozilla.org/en-us/docs/http/x-frame-options)或xmlhttprequest检索身份验证二维码并使用它登录用户的帐户。

2.即使没有任何xss,也有可能让有权访问用户会话(例如,如果用户仍在网站上登录,但远离计算机)的人扫描二维码,从而登录到用户帐户。

通过电子邮件编码(实际上,有些用户也总是登录到他们的电子邮件帐户中,因此这可能毫无意义,除非攻击者的js无法提供qr码),或者在显示qr码之前提示用户输入密码(这仍然容易得多在台式机/笔记本电脑键盘上键入密码,而不是在移动设备的虚拟键盘上键入网站地址+登录名或电子邮件+密码。

rabilities,例如sql注入、csrf等)使用[httponly]标记(http://en.wikipedia.org/wiki/http_ucookie_httponly戥ucookie)等设置会话id cookie。例如,如果不小心让攻击者知道用户的密码(如果在带有某些攻击者js的页面上提示用户输入密码),比让他们获得一个新会话(这只意味着访问该帐户,而不暴露密码)更糟糕。

a注意http/https
---------


正确(因此验证url将具有正确的方案)。可以通过添加[secure_proxy_ssl_头](https://docs.djangoproject.com/en/dev/ref/settings/secure proxy ssl头)设置并从反向代理提供相应的头(但不要忘记在所有请求中始终设置或删除此头发送到上游:否则,比方说,如果您的网站通过http和https都可用,那么通过http打开网站的用户将能够在客户端设置此头,因此request.is_secure()将返回true,这从安全角度来说是不好的)。

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

推荐PyPI第三方库


热门话题
如何用java表示这个数学函数的算法   Java/Stream帮助:仅使用streams将嵌套的映射列表转换为映射   使用Selenium连接到数据库时发生java未知主机异常   java如何了解jvm内存使用:“堆内存”和“堆外内存”   java Oracle BI报告导入模板   java如何使用Spring将xml转换为bean?   java线程。join()以保证执行顺序   java从THINGSPEAK到ANDROID应用程序获取JSON数据   使用Java的stanford库中的异常   java正确使用来自其他类文件的方法   如果集合中的元素类型为接口类型,如何填充集合?(爪哇)   记录java。util。记录器创建的文件超过了应有的数量   类Java对象uniq值   尝试调用无法应用于()的方法时出现java错误