V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
stackpop
V2EX  ›  Python

多个来源第三方登陆,这种情况用户一般怎么管理呢

  •  
  •   stackpop ·
    sjtubinlong · 2012-07-27 18:27:09 +08:00 · 8897 次点击
    这是一个创建于 4537 天前的主题,其中的信息可能已经有所发展或是发生改变。
    比如有新浪微博、人人网、豆瓣、开心网、QQ用户登陆,怎么设计让不同来源的用户登陆状态、注销、根据不同来源设置不同内容,并且在全站保持。。。。

    等等,其实还有好多其它问题,希望提供解决方案。我做得一个简单社交游戏,用户主要来源以上几家,正在考虑要不要保存下用户资料在数据库中映射一个账号,。。。。。


    总之用户怎么管理觉得挺头疼,求指导。
    17 条回复    2019-10-10 16:31:00 +08:00
    RoCry
        1
    RoCry  
       2012-07-28 00:06:03 +08:00
    我们现在这块也搞得挺麻烦的...
    uarethefuture
        2
    uarethefuture  
       2012-07-29 22:47:24 +08:00
    学习。。
    loo2k
        3
    loo2k  
       2012-07-29 22:55:48 +08:00
    目前我做的方法:
    1. 新建一个第三方登录的表,用来保存第三方登录的用户信息,并和现有的用户表映射;
    2. 第三方登录后绑定或者新建一个帐号(原有用户表);
    3. 用户使用第三方登录时在 SESSION 中保存第三方名称(区别来源);
    4. 第三方登录后从第三方登录表找到映射的用户,使用原来的登录方法;

    只是大概的思路,没写具体细节。
    Mutoo
        4
    Mutoo  
       2012-07-31 00:16:20 +08:00
    @loo2k 那样的话从不同的第三方登录,即使是同一个人也变成不同的帐号了。比如我用人人和QQ分别登陆,那就是人人一个帐号,QQ另一个帐号。有办法统一吗?
    willwen
        5
    willwen  
       2012-07-31 08:37:40 +08:00
    @loo2k 的方法很好,值得学习。
    在Node.js中,有两个第三方模块是有这种功能的,分别是everyauth和淘宝苏千的node-weibo(未更新)
    http://everyauth.com/
    https://github.com/fengmk2/node-weibo
    coosir
        6
    coosir  
       2012-07-31 10:37:14 +08:00
    第三方的专门用一个表保存,可以映射到自己的用户表。

    一种方法是只允许用户进行绑定,这样的话原账号可以映射多个第三方账号。(用户在用不同的第三方账号连接的时候可能会不小心额外新建账户,所以只允许绑定的方式是比较简单的,不过对新用户的体验不是很好。)
    如果允许用户通过第三方账号直接登录,提供解绑和增加绑定功能即可。(万一用户之前用微博登录过,之后又用QQ登录新建了账户,那可以解除QQ绑定再增加绑定到原账户上。不过这个需要用户自己去发现。)

    仅供参考
    chloerei
        7
    chloerei  
       2012-07-31 10:52:05 +08:00
    本地网站帐号和第三方认证帐号是一对多关系,用第三方登录的时候实际登录的是本地网站帐号
    ayang23
        8
    ayang23  
       2012-07-31 10:57:56 +08:00
    这个东西用mongo很好解决

    user = {
    "uid": uid,
    "email": email,
    "name": name,
    "created_time": datetime.utcnow(),
    "last_accessed_time": datetime.utcnow(),
    "accounts": {
    "local":{"username":"ddd","password":"dddddd"},
    "google":{"email":"daflskj"},
    .........
    },
    }
    yudun1989
        9
    yudun1989  
       2012-07-31 11:20:36 +08:00
    @Mutoo 其实现在我们这边正在做。最好的方法就是比如传统邮箱注册和新浪微博等社会化账号平级,用户可以对新浪微博等取消取消绑定,也可以对邮箱取消绑定。
    对于人人和QQ分别登陆的问题,就看你想怎么弄了。这个问题没法避免,目前有的网站是有"销毁账号的功能" ,比如蘑菇街。
    loo2k
        10
    loo2k  
       2012-07-31 13:05:17 +08:00
    @Mutoo 不是,是即使用不同的帐号登录,最后都指向系统原有用户表的一个指定用户。
    因为在使用第三方登录后,必须绑定或者新建一个原系统的用户。
    第三方登录后根据第三方登录表上的映射,获取原系统用户表里的用户信息。
    venngomez
        11
    venngomez  
       2012-07-31 13:17:59 +08:00
    @ayang23 如何確定第三方是原系统的某个用户?
    ayang23
        12
    ayang23  
       2012-07-31 14:34:12 +08:00
    绑定。你研究一下stackoverflow的登录和绑定系统,他把stackexchange账户也看做是等同于google/facebook等第三方的openid。
    Mutoo
        13
    Mutoo  
       2012-07-31 14:58:59 +08:00
    @loo2k
    @ayang23 原来是让用户自己选[绑定]或者[新建用户]呀,这样的话到是省事了…
    barbery
        14
    barbery  
       2012-10-30 11:47:41 +08:00
    刚好最近在做,说说我的看法。。。
    自己的用户表
    $user={
    'id'=>primary key 自增
    'email'
    'password'
    }
    第三方绑定表
    $user_open = {
    'user_id' => primary key 指向$user表id
    'key' => 第三方登陆用户唯一标示符
    'token' => 授权码
    'from' => 来源标识
    }
    我的处理逻辑是:第三方账户登陆过来,先到$user_open 找下key,不存在,则当成新用户处理,新插入一个$user表,拿到user_id 插入$user_open 表。如果用户是已经存在账号的,可以输入他的账号,然后把$user_open 的user_id 更新下。。。
    不过这样就存在一个问题,绑定的话,要合并信息是个问题。。。不过应该不会有用户来你网站用了微博登陆玩了1年,然后又用QQ登陆玩了1年,然后再把2个账号给绑定吧。。。
    ianluo
        15
    ianluo  
       2012-10-30 13:42:46 +08:00
    我觉得给每个第三方的登陆新建一个用户比较自然一些。因为如果用户用了既然绑定了大多数是知道用哪个账号登陆的,如果还了账号登录多数情况下是因为想换一个登陆账号,这和新建一个账号差不多吧。对于绝大多数用户来说应该是最好理解的。
    AlloVince
        16
    AlloVince  
       2012-10-30 13:49:13 +08:00
    ivydom
        17
    ivydom  
       2019-10-10 16:31:00 +08:00
    authing.cn 身份云
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1281 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 17:59 · PVG 01:59 · LAX 09:59 · JFK 12:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.