使用数据库和社交网站登录

Posted

技术标签:

【中文标题】使用数据库和社交网站登录【英文标题】:Login using DB and Social website 【发布时间】:2013-02-27 18:04:04 【问题描述】:

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

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

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

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

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

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

我正在使用 Spring Security。

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

谢谢。

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于使用数据库和社交网站登录的主要内容,如果未能解决你的问题,请参考以下文章

创建社交网站

创建社交网站

DemoQQ,github,微博第三方社交登录

您无法直接访问此页面 - HybridAuth 社交登录

如何将 Azure 授权社交提供程序与静态 html 角度网站一起使用?

搭建社交网站