问题 使用oAuth登录,我应该存储/使用什么来识别用户?


我试图在我的应用程序中实现登录与facebook / twitter功能,我阅读oAuth的一些指南,我想我理解了一些基本概念,这是我理解的(如果我错了请纠正我):

  1. myApp向oAuth提供者发送请求,获取(A)请求令牌。
  2. 发送用户验证(A),返回(B)经过身份验证的请求令牌(这是什么称为oAuth令牌?)
  3. 使用(B)获取(C)访问令牌。
  4. 使用C来访问用户信息。

这是我无法解决的问题,我应该使用/存储哪一个来识别用户?我想到了使用其中每一个的可能性,但我总是坚持如何检查用户是否已登录...


10353
2018-04-11 05:21


起源



答案:


如果只需要身份验证,那么只需存储即可 user_id 足够。

所以创建另一个表,如:

id | service_name | user_id | my_user_id

哪里 service_name 或者是 twitter 要么 facebookuser_id  - 来自twitter / facebook和用户的id my_user_id 是一个 user_id 在您的身份验证系统中

所以:

SELECT my_user_id FROM oauths WHERE service_name = 'twitter' AND user_id = 42

会返回你的系统user_id或什么也没有

PS: service_name 可以(并且应该)进行规范化,我将其保留为字符串只是为了简化示例

PPS:正如你在评论中所说,你可能想要“发帖/发推”。

在这种情况下,您需要为Twitter存储用户的访问令牌,并且不为facebook存储任何其他内容,但请求 publish_stream 验证用户时的权限。


10
2018-04-11 05:22



我也在考虑发布/推特,但是通过user_id,你的意思是,存储我们可以使用访问令牌访问的user_id吗? - hndr
@that_guy:是的。来自oauth提供者的user_id - zerkms
@that_guy:顺便说一句,补充一下发帖 - zerkms
嗯..我的头还在显示加载栏...但我想我明白了,谢谢! - hndr
另一个问题,如果我使用提供者的user_id来识别用户,这是否意味着我每次都需要对令牌进行身份验证?那为什么我会存储用户的Twitter访问令牌?或者我应该在每次用户登录时更新令牌的访问权限? - hndr


答案:


如果只需要身份验证,那么只需存储即可 user_id 足够。

所以创建另一个表,如:

id | service_name | user_id | my_user_id

哪里 service_name 或者是 twitter 要么 facebookuser_id  - 来自twitter / facebook和用户的id my_user_id 是一个 user_id 在您的身份验证系统中

所以:

SELECT my_user_id FROM oauths WHERE service_name = 'twitter' AND user_id = 42

会返回你的系统user_id或什么也没有

PS: service_name 可以(并且应该)进行规范化,我将其保留为字符串只是为了简化示例

PPS:正如你在评论中所说,你可能想要“发帖/发推”。

在这种情况下,您需要为Twitter存储用户的访问令牌,并且不为facebook存储任何其他内容,但请求 publish_stream 验证用户时的权限。


10
2018-04-11 05:22



我也在考虑发布/推特,但是通过user_id,你的意思是,存储我们可以使用访问令牌访问的user_id吗? - hndr
@that_guy:是的。来自oauth提供者的user_id - zerkms
@that_guy:顺便说一句,补充一下发帖 - zerkms
嗯..我的头还在显示加载栏...但我想我明白了,谢谢! - hndr
另一个问题,如果我使用提供者的user_id来识别用户,这是否意味着我每次都需要对令牌进行身份验证?那为什么我会存储用户的Twitter访问令牌?或者我应该在每次用户登录时更新令牌的访问权限? - hndr