我在不同领域的几个网站:example.com,example.org,mail.example.com
和passport.example.org.所有网站都具有共同的外观,应该共享相同的用户群.
在这种极端情况下,我仍然希望所有站点透明地(尽可能地)共享具有以下关键属性的用户会话:
单点登录.当用户passport.example.org登录并访问任何其他站点时 - 他应该被视为已登录.
登录用户$username在站点标题和不同的导航菜单中获得"Hello ",问候语,列出他们有权访问的服务.如果他没有登录,而不是打招呼有一个"登录"链接,指向passport.example.org/signon.
可信域列表是已知的,因此使用OpenID或某些homebrewn轻量级协议实现起来相当简单.当用户第一次访问该站点时,我将其重定向到特殊身份验证端点passport.example.org,然后以静默方式将其重定向回来,其中包含身份信息(或"未签名"匿名身份).对于大多数浏览器,这是完全透明的 显然,我正在使用nonce值来对抗重定向循环.
单一签收.当用户下次访问任何网站时点击任何网站标题中的"注销"时,他应被视为"未登录".
OpenID不是为此而设计的.我当前的想法(我已经有一个部分工作的实现)是在DB中发送不是用户身份,而是"全局"会话令牌和共享全局会话表(global_session_token↔用户关系).
机器人和无cookie用户支持.站点具有公共区域,用户代理可以访问这些区域而无需任何cookie支持.
因此,我在(1)中提到的重定向成为一个问题,因为对于每个单页请求,我最终都会将用户代理抛给auth端点并返回.这不仅会使机器人感到困惑,而且会很快污染我的会话数据库.我绝对不想显示"嘿,你没有启用cookie,走开!"页面,这是非常粗鲁和令人失望的.虽然我需要cookie支持登录,但我希望用户可以自由阅读网站的内容等等 - 没有任何限制.
而且我明确地不希望把URL中的会话ID,除了我刚才提到了一些透明的跨域重定向.我认为这样做是一个安全问题,通常只是一件坏事.
在这里,我几乎没有想法.
好吧,我知道这很难,但谷歌实际上(这是否在某种程度上google.com,
google.很多-的-通用顶级域名,gmail.com等等),对不对?所以这应该是可能的.
我要感谢协议描述的想法(这是最好的)或系统的链接(要么是代码阅读,要么是直播现场观看和学习)已经成功地实现了这样的事情.
总结一下:几个域没有共同的根,共享用户群,单点登录,单点注销,匿名浏览不需要cookie.
所有站点都在同一个网络上(但在不同的服务器上)并且部分共享同一个PostgreSQL数据库(在同一个数据库的不同方案中).大多数站点都是用Python/Django编写的,但其中一些是使用PHP和Ruby on Rails.虽然我正在考虑与框架和语言无关的东西,但我很感激指向任何实现.即使我不能使用它们,如果我能理解它是如何完成的,那么也许我能够实现类似的东西.
我已经编写了一个基于FUSE的小文件系统,现在唯一缺少的是我想用fstab(5)注册它以在系统启动时自动挂载它和/或用它手动挂载它mount /srv/virtual-db.我怎样才能做到这一点?
我知道,我可以/usr/bin/vdbfs.py /srv/virtual-db从一些初始化脚本运行,但这并不完美.
我很抱歉,因为这可能不是一个编程问题,但它是高度相关的,因为打包和部署仍然是程序员的工作.
有manage.py runserver在Django或ruby script/server在Ruby on Rails的-那些熟悉这些框架之一,应该已经得到了我正在寻找的想法.它们运行微小的"独立"Web服务器,完全足以在本地调试应用程序,而无需其他软件(Apache/Nginx/Lighttpd /等).
我想知道是否有这样的工具的PHP实现,或者,某些PHP框架可能有这样的功能?当然,我可以打包预先构建的预配置静态nginx可执行文件,但这不是很好,当然也不是跨平台的.使用PHP编写的独立调试Web服务器将使程序包自包含.
即我想键入类似的东西php tools/runserver.php,指向浏览器http://localhost:8000/并查看该站点并运行,准备调试.
我的Google-fu让我失望,但我强烈怀疑已经有这样的项目了.
我想找到一种方法将etcd集群部署为Docker Swarm服务,该服务将自动配置而无需任何交互.基本上,我想到了这个命令的精神:
docker service create --name etcd --replicas 3 my-custom-image/etcd
Run Code Online (Sandbox Code Playgroud)
我假设覆盖网络配置为安全并提供加密和身份验证,所以我相信我不需要TLS,甚至不需要--auto-tls.当这可以在另一层上解决时,不希望额外的头痛找到提供证书的方法.
我需要--name为每个实例都有一个唯一的,但是我可以从一个可以使用的入口点脚本中获得它export ETCD_NAME=$(hostname --short).
问题是,我坚持初始配置.根据聚类指南,有三个选项,但似乎都不适合:
etcd,我将获得节点容器的所有IP,但没有_etcd-server._tcp记录.ETCD_INITIAL_CLUSTER因为虽然我知道IP,但我不知道其他节点的名称,我不知道有任何方法可以解决这些问题.(我不打算将Docker API套接字暴露给etcd容器.)docker-compose.yml,它就会自动做正确的事情,没有问题就是这样".有什么技巧可以拉吗?
我正在使用Django REST Framework v3.6内置交互式文档django_rest_framework.documentation(不是 django-rest-swagger).
基本上,我正在遵循官方文档并在我的URLset配置中使用它:
from rest_framework.documentation import include_docs_urls
urlpatterns = [
url(r"^", include_docs_urls(title="My API")),
...
]
Run Code Online (Sandbox Code Playgroud)
一切似乎工作,我得到一个不错的交互式文档页面,但我有一个ViewSet与lookup_field = "slug"一两件事有关生成的文档困扰着我:
我希望获得一些有用的信息,例如"一个独特的永久分配的字母数字ID"或这些行之类的东西,但找不到这些数据来自的任何文档.
有一种解决方法,但我真的不想明确定义所有架构.我想用很好的文档字符串声明我的类,并自动生成文档.我还发现了一个建议放入slug -- here goes the description文档字符串,但它似乎不起作用 - 文本只显示Markdown格式描述的其余部分.
所以......我想知道两件事:
我想检索使用Union连接的查询结果集的前1个值
SELECT TOP 1 * FROM
(
SELECT paused_time as end_time
FROM production_time
WHERE created_time = curdate()
UNION
SELECT resumed_time as end_time
FROM pause_timer
WHERE created_time = curdate()
UNION
SELECT end_time as end_time
FROM timer_idle
WHERE created_time = curdate()
) as end_time
ORDER BY end_time DESC
Run Code Online (Sandbox Code Playgroud)
但无法获得预期的结果.
我有一个函数,它在同一个数据集上执行多个查询,我想确保所有查询都能看到完全相同的数据.
就SQL而言,这意味着支持它的数据库的REPEATABLE READ隔离级别.如果数据库不具备,我不介意更高级别甚至完全锁定.
据我所知,情况并非如此.即如果我在一个Python shell中运行类似这样的代码:
with transaction.atomic():
for t in range(0, 60):
print("{0}: {1}".format(t, MyModel.objects.count()))
time.sleep(1)
Run Code Online (Sandbox Code Playgroud)
一旦我MyModel.objects.create(...)在另一个中,运行循环看到的值立即增加.这正是我想要避免的.进一步的测试显示行为符合READ COMMITTED级别,这对我的口味来说太宽松了.
我还想强调一点,我想要更严格的隔离级别只针对单个函数,而不是整个项目.
我最好的选择是什么?
在我的特殊情况下,我唯一关心的数据库是PostgreSQL 9.3+,但我也希望与SQLite3有一些兼容性,在这种情况下即使完全锁定整个数据库也没关系.然而,显然,解决方案越普遍,它就越优选.
python django transactions transaction-isolation isolation-level
我正在对一个Python包进行debianization,它有一些奇怪的依赖.它要么:
python2.7python2.6和python-ordereddict(我ordereddict在PyPI上的自建包)例如,我setup.py自己:
deps = ["Flask >=0.8"]
if not hasattr(collections, "OrderedDict"): # Python 2.6
deps.append("ordereddict")
setup(
…
install_requires=deps,
…
)
Run Code Online (Sandbox Code Playgroud)
我没有在Debian包装文档中找到任何关于此事的内容.突然之间,我试过写作
Depends: ..., python2.7 | (python2.6, python-ordereddict)
Run Code Online (Sandbox Code Playgroud)
但是,毫不奇怪,这是一个错误的语法,不起作用:
dpkg-gencontrol: warning: can't parse dependency (python2.6
Run Code Online (Sandbox Code Playgroud)
我正在使用dh_python2并${python:Depends}提供非常不合理的列表
Depends: python2.7 | python2.6, python (>= 2.7.1-0ubuntu2),
python (<< 2.8), python-flask, python-ordereddict
Run Code Online (Sandbox Code Playgroud)
有了这样的依赖关系列表,它会要求python-ordereddict进行python2.7,不存在.显然我无法补丁python2.7-minimal说Provides: python-ordereddict(就像它完成的那样python-argparse).
关于如何正确打包这样的库的任何建议,好吗?
python ×3
debugging ×2
django ×2
cmake ×1
debian ×1
deployment ×1
docker ×1
dpkg ×1
etcd ×1
filesystems ×1
fuse ×1
gcc ×1
gnu ×1
linux ×1
mount ×1
mysql ×1
packaging ×1
php ×1
python-2.x ×1
regex ×1
session ×1
sql ×1
transactions ×1
validation ×1
webserver ×1