Django下两个projects共用一个用户系统
2017-10-16 09:58
197 查看
首先描述一下要解决的问题:两个独立的手机应用A和B,A和B需共用一个后台用户系统,但是登陆要完全分开,且同一账号同一应用同一时刻只能有一个有效的登陆。后台使用django。
举例来说用户在应用A上注册了一个user,用户可使用同样的user登陆应用B而无需再注册。如果用户在一台手机上登陆了应用A,然后用户换一台手机再次登录应用A,则原来手机的应用A会退出登录(这和微信的账户登录原理相似)。应用B有类似的登陆逻辑。但是用户登陆应用A和登陆应用B是相互独立的。也即如果用户登录了应用A,然后用户用任意手机登录应用B,原应用A的登陆不受影响。
解决方案:
Django提供了特别方便的用户和session管理。在这里我们为应用A和B各写了一个django的后台project。
第一步,对django的用户模块做扩展,增加域用于记录user的token。
第二步,编写自己的认证后端。
一个认证后端需要实现包含以下两个方法的一个类:
第三步,在django settings中加入如下设置:
第四步,测试看看能否能像预期那样工作吧!
举例来说用户在应用A上注册了一个user,用户可使用同样的user登陆应用B而无需再注册。如果用户在一台手机上登陆了应用A,然后用户换一台手机再次登录应用A,则原来手机的应用A会退出登录(这和微信的账户登录原理相似)。应用B有类似的登陆逻辑。但是用户登陆应用A和登陆应用B是相互独立的。也即如果用户登录了应用A,然后用户用任意手机登录应用B,原应用A的登陆不受影响。
解决方案:
Django提供了特别方便的用户和session管理。在这里我们为应用A和B各写了一个django的后台project。
第一步,对django的用户模块做扩展,增加域用于记录user的token。
第二步,编写自己的认证后端。
一个认证后端需要实现包含以下两个方法的一个类:
class B_Backend: def authenticate(self, username=None, token=None): try: _user=TestUser.objects.get(user_id=username, client_token_B=token) return _user except: return None def get_user(self, userid): try: return TestUser.objects.get(user_id=userid) except MmcUser.DoesNotExist: return None
第三步,在django settings中加入如下设置:
AUTHENTICATION_BACKENDS = ( 'APPB.models.B_Backend', )
第四步,测试看看能否能像预期那样工作吧!
相关文章推荐
- windows XP 两个系统管理员用户,删除一个~
- 嵌入式系统总是要用户对变量或寄存器进行位操作。给定一个整型变量a,写两段代码,第一个设置a的bit 3,第二个清除a 的bit 3。在以上两个操作中,要保持其它位不变。
- django 新建一个用户表 替代系统中自带的user
- 一个form表单中两个按钮点击事件以及系统提示用户
- MVC框架——学生信息管理系统(多表,多事务如何处理,一个用户如何共用一个Connection连接)
- 一个不用密码的用户系统
- mac登陆窗口 有两个登陆用户,怎么删除一个
- PHP开发一个完整、安全的用户登录系统
- 用字典创建一个平台的用户信息(包含用户名和密码)管理系统,新用户可以用与现有系统帐号不冲突的用户名创建帐号,已存在的老用户则可以用用户名和密码登陆重返系统。
- 一个使用django开发的综合成绩管理系统 显示不了验证码
- asp.net 单用户登录(系统中只允许同一账户的一个存在--排它多处登录)
- 一个完整、安全的用户登录系统
- windows 两个用户,默认其中一个用户登录
- springsecurity中如何做到多个用户不能使用同一个账号同时登陆系统
- 一个基于多用户的抓取视频下载系统 PhaGrabVideo
- 两个view共用同一个animation对象的问题
- Ubuntu系统中如何给一个用户授权通过sudo执行所有命令
- lesson 9:编写一个应用程序,用户分别从两个文本框输入学术的姓名和分数,程序按成绩排序将这些学生的姓名和分数显示在一个文本区中。
- 黑马程序员之C#编程基础学习笔记:提示用户输入两个整数(假设i1,i2)。如果i1,i2都是正数,则将i2的值递增一个数,然后打印i1+i2的值;如果i1,i2都是负数,则将i1的值递减10个数,然后