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

2012-07-27 18:27:09 +08:00
 stackpop
比如有新浪微博、人人网、豆瓣、开心网、QQ用户登陆,怎么设计让不同来源的用户登陆状态、注销、根据不同来源设置不同内容,并且在全站保持。。。。

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


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

只是大概的思路,没写具体细节。
Mutoo
2012-07-31 00:16:20 +08:00
@loo2k 那样的话从不同的第三方登录,即使是同一个人也变成不同的帐号了。比如我用人人和QQ分别登陆,那就是人人一个帐号,QQ另一个帐号。有办法统一吗?
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
2012-07-31 10:37:14 +08:00
第三方的专门用一个表保存,可以映射到自己的用户表。

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

仅供参考
chloerei
2012-07-31 10:52:05 +08:00
本地网站帐号和第三方认证帐号是一对多关系,用第三方登录的时候实际登录的是本地网站帐号
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
2012-07-31 11:20:36 +08:00
@Mutoo 其实现在我们这边正在做。最好的方法就是比如传统邮箱注册和新浪微博等社会化账号平级,用户可以对新浪微博等取消取消绑定,也可以对邮箱取消绑定。
对于人人和QQ分别登陆的问题,就看你想怎么弄了。这个问题没法避免,目前有的网站是有"销毁账号的功能" ,比如蘑菇街。
loo2k
2012-07-31 13:05:17 +08:00
@Mutoo 不是,是即使用不同的帐号登录,最后都指向系统原有用户表的一个指定用户。
因为在使用第三方登录后,必须绑定或者新建一个原系统的用户。
第三方登录后根据第三方登录表上的映射,获取原系统用户表里的用户信息。
venngomez
2012-07-31 13:17:59 +08:00
@ayang23 如何確定第三方是原系统的某个用户?
ayang23
2012-07-31 14:34:12 +08:00
绑定。你研究一下stackoverflow的登录和绑定系统,他把stackexchange账户也看做是等同于google/facebook等第三方的openid。
Mutoo
2012-07-31 14:58:59 +08:00
@loo2k
@ayang23 原来是让用户自己选[绑定]或者[新建用户]呀,这样的话到是省事了…
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
2012-10-30 13:42:46 +08:00
我觉得给每个第三方的登陆新建一个用户比较自然一些。因为如果用户用了既然绑定了大多数是知道用哪个账号登陆的,如果还了账号登录多数情况下是因为想换一个登陆账号,这和新建一个账号差不多吧。对于绝大多数用户来说应该是最好理解的。
AlloVince
2012-10-30 13:49:13 +08:00
ivydom
2019-10-10 16:31:00 +08:00
authing.cn 身份云

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/43646

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX