使用openid-selector实现没有第三方的社交登录

den*_*xic 14 php openid twitter facebook oauth

我在本网站上查看了大约50个问题,但没有一个真正提供最新的解决方案或者不需要第三方插件(我想保持对信息的控制而不是让其他人访问我得到的信息)或那是完整的.我会冒着发布它的风险,并交叉我的手指.

我已经看到了更多,但这里有一些我看过:

因此,我希望将Facebook,Google和Twitter作为我网站上的登录选项(显然,这是人们首选的社交登录方式的80%).
如果我去wiki.openid.net,你会建议我使用哪个软件包以便于实现?你过去使用过哪一个?

另外,如果可能的话,您能解释一下如何实施建议的库吗?即

  1. 我下载它,把它放在我的网站上,
  2. 然后获取我的网站的openID,
  3. 然后使用http://code.google.com/p/openid-selector/进行显示...

这是正确的吗?我不知道...

基本上一步一步的指南会很棒.我敢肯定,任何花时间回答这个问题的人都会获得大量积分,这是热门话题.

谢谢您的帮助.

Mac*_*n13 11

因此,您希望在不使用第三方服务的情况下实施Google和Facebook/Twitter登录.这意味着您需要实施OpenID登录(针对Google)和OAuth(针对Facebook/Twitter).

第一个OpenID.你可以为Light下载LightOpenID一个很好的轻量级OpenID类.很容易实现.一些samplecode如何使用这个类.

// Set up your OpenID object
$openid = new LightOpenID('http://yourdomain.com');
$openid->returnUrl = 'http://yourdomain.com/after/login/user/goes/here';
$openid->identity = 'https://www.google.com/accounts/o8/id'; // OpenID provider URL
$openid->required = array('namePerson/friendly', 'contact/email');

// Step 1: Redirect the user to the OpenID provider
if (!$openid->mode) // If not authenticated
    header('Location: ' . $openid->authUrl()); // Redirect to provider

// Step 2: User returned, sign the user into our application
if ($openid->validate()) { 
    // OpenID authentication is successful
    // Sign in the user and read requested attributes
    $attrArray = $openid->getAttributes();
}
Run Code Online (Sandbox Code Playgroud)

这应该让你开始使用OpenID部分.OpenID选择器只不过是身份URL的选择器.

然后实施OAuth登录以支持Facebook和Twitter登录.有一些关于如何实现Facebook和Twitter登录支持的文档.对于Facebook,你应该阅读开发者网站认证,这不是太复杂.Twitter使用相同的协议,并且在此主题上也有相当不错的文档.

如果您不想自己实现它,请查看您可以在应用程序中包含的OAuth库,例如socialoauth(支持两者)或twitteroauth(支持twitter).谷歌将帮助您找到更多这样的图书馆.

刚开始使用库实现读取代码,注释和文档,并在StackOverflow上提问如果卡住了.:)

  • 使用OpenID,您可以通过添加"contact/email"属性来请求电子邮件地址.对于Facebook,您需要请求权限通过电子邮件发送用户在文档中查找`scope = email` thingy.对于Twitter,无法通过电子邮件发送给用户或获取其电子邮件地址,这是Twitter API开发人员的设计选择. (2认同)