多个来源第三方登陆,这种情况用户一般怎么管理呢 - V2EX
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 9345 次点击
    这是一个创建于 4880 天前的主题,其中的信息可能已经有所发展或是发生改变。
    比如有新浪微博、人人网、豆瓣、开心网、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. 第三方登录后从第三方登录表找到映射的用户,使用原来的登录方法;

    只是大概的思路,没写具体细节。
        4
    Mutoo  
       2012-07-31 00:16:20 +08:00
    @loo2k 那样的话从不同的第三方登录,即使是同一个人也变成不同的帐号了。比如我用人人和QQ分别登陆,那就是人人一个帐号,QQ另一个帐号。有办法统一吗?
    Mutoo
    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     Solana     2550 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 08:59 PVG 16:59 LAX 00:59 JFK 03:59
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86