使用DB和Social网站登录

时间:2013-03-12 09:34:05

标签: java facebook spring java-ee spring-security

我有一个拼车网站,用户可以通过我的数据库登录,一切正常。

登录后,用户可以发布拼车广告。

现在我需要用户通过Facebook登录。如何处理这种情况?

案例1:用户未在我的数据库中注册并使用了Facebook凭据。我可以显示只读的页面,但现在说用户想发布广告,在这种情况下该怎么办?

我的数据库的结构使得postAd表的user_id为外键,所以在这种情况下我应该添加一个带有该email_id的用户和一个虚拟密码以允许它们发布?或者这些场景是如何处理的?

案例2:如果用户使用Facebook登录,我是否需要在我的数据库中搜索该电子邮件ID才能找到该用户?

我正在使用Spring Security。

这样的网站一般如何运作?

感谢。

2 个答案:

答案 0 :(得分:2)

查看Spring SocialSpring Social Facebook个项目。他们这样做:

  1. 案例1:Implicit sign up feature。您必须提供将在建立FB连接但在DB中没有相应用户时调用的ConnectionSignUp实现。您可以在此处创建新的数据库用户。
  2. 案例2:有一个SignInAdapter界面(参见ProviderSignInController's dependencies 柱头)。您可以通过userId找到数据库用户,然后准备认证并将其注入SecurityContextHolder。
  3. 一般的想法:你可以有多个提供者(FB,Twitter等等),但无论如何,每个社交个人资料都将与一些Spring Security用户匹配(例如,它将用于授权)。如果它们与userId匹配,那么您可以为多个社交帐户拥有一个Spring Security用户。 此方法的优点是您可以更好地控制用户配置文件(即使FB帐户处于活动状态,您也可以禁用本地用户帐户)。您可以使用java代码中的Facebook API。

    作为选项2,您可以通过JavaScript进行FB登录。然后手动为案例1和案例2实现两个功能(例如通过自定义过滤器)。它可能更轻巧(取决于您需要什么功能)。

答案 1 :(得分:1)

Facebook Oauth为每个用户提供唯一的用户ID。所以,如果用户使用facebook登录,最好存储用户的详细信息,例如id,name,email等。在user table.so中,你可以使用该userid作为主键...如果用户已经存在jsut跳过此部分并将其带到帖子页面。

相关问题