我计划使用django制作2或3个网站。每个网站都有自己的主题。例如:网站A是ecomercial网站,网站B是论坛。
我希望那些网站用户可以共享一个帐户,这意味着,一个帐户,可以登录这些网站。
这意味着,他可以在论坛中创建一个帐户,并在那个网站商店购物。使用相同的用户名和passworkds等。
那些2或3个网站可能不在同一个主机中,我可能需要远程数据库进行此身份验证。
我该怎么做?
答案 0 :(得分:4)
最简单的方法就是像StackExchange那样做;通过创建自己的openid提供程序。
使用python-openid非常容易,它提供sample server作为其文档的一部分。
完成设置后,使用django-social-auth与openid集成。
答案 1 :(得分:3)
Django文档涵盖了使用相同的' auth_db'和多个项目中的AuthRouter应该有效:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
},
'auth_db': {
'NAME': 'auth_db',
'ENGINE': 'django.db.backends.mysql',
'USER': 'mysql_user',
'HOST': '127.0.0.1',
'PASSWORD': 'swordfish',
},
}
class AuthRouter(object):
"""
A router to control all database operations on models in the
auth application.
"""
def db_for_read(self, model, **hints):
"""
Attempts to read auth models go to auth_db.
"""
if model._meta.app_label == 'auth':
return 'auth_db'
return None
def db_for_write(self, model, **hints):
"""
Attempts to write auth models go to auth_db.
"""
if model._meta.app_label == 'auth':
return 'auth_db'
return None
def allow_relation(self, obj1, obj2, **hints):
"""
Allow relations if a model in the auth app is involved.
"""
if obj1._meta.app_label == 'auth' or \
obj2._meta.app_label == 'auth':
return True
return None
def allow_migrate(self, db, model):
"""
Make sure the auth app only appears in the 'auth_db'
database.
"""
if db == 'auth_db':
return model._meta.app_label == 'auth'
elif model._meta.app_label == 'auth':
return False
return None
答案 2 :(得分:0)
这是一种替代解决方案,无需使用与auth-db相同的数据库。
此过程基于CAS(中央身份验证服务)协议,该协议支持Django和Flask框架的SSO(单一登录)和SLO(单一注销):
[注意]: