2

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

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

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

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

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

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

我正在使用 Spring 安全性。

这样的网站通常如何运作?

谢谢。

4

2 回答 2

2

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

  1. 对于案例 1:有隐式注册功能。您必须提供 ConnectionSignUp 实现,该实现将在 FB 连接建立但 DB 中没有相应用户时调用。您可以在此处创建新的数据库用户。
  2. 对于案例 2:有一个 SignInAdapter 接口(请参阅ProviderSignInController 的依赖项章节 )。您可以通过 userId 找到 DB 用户,然后准备 autentication 并将其注入 SecurityContextHolder。

总体思路:您可以拥有多个提供者(FB、Twitter 等),但在任何情况下,每个社交资料都将与某个 Spring Security 用户匹配(例如,将用于授权)。如果它们通过 userId 匹配,那么您可以为多个社交帐户拥有一个 Spring Security 用户。这种方法的优点是您可以更好地控制用户配置文件(即使 FB 帐户处于活动状态,您也可以禁用本地用户帐户)。您可以从 Java 代码中使用 Facebook API。

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

于 2013-03-12T09:53:29.633 回答
1

Facebook Oauth 为每个用户提供一个唯一的用户 ID。因此,如果用户使用 facebook 登录,最好将用户的详细信息(例如 ID、姓名、电子邮件等)存储在用户表中。所以,您可以使用该用户 ID 作为主键...如果用户已经存在 jsut 跳过这部分并将它们带到发布页面..

于 2013-03-13T06:24:32.770 回答