2012-05-23 159 views
2

我有一个API和一个Web应用程序,使用Rails和Devise gem进行身份验证。 随着设计和Omniauth我可以使用Facebook注册并通过网站与Facebook登录。 我有我的API受token_authenticable和TokensController保护,所以当你想先与我的API交互,你必须传递给TokensController你的用户名和密码,它会给你一个有效的令牌,我的问题是当用户发生什么是注册Facebook,我应该传递给TokensController的用户名和Facebook令牌来生成令牌?有没有一些标准的方法来做到这一点?Rails + Devise + Facebook身份验证

感谢您的意见。

回答

1

感谢您的评论;思维在之后一会是最好的选择,这是我终于做到了:

注:

  • :我的代码在客户端和服务器端(API)

    客户端分离获取某个用户的Facebook令牌和Facebook用户ID。

  • 调用API方法创建方法从令牌控制器,与我得到上面的参数。

服务器侧

  • 我接收Facebook的令牌和Facebook的用户ID。
  • 使用Facebook令牌我从API获取Facebook用户ID。
  • 我验证来自请求的接收UID和Facebook UID是相同的。
  • 如果UID相同,我为我的应用程序生成一个随机标记,并将其返回给响应。

注意:所有通信都是通过HTTPS完成的。

1

在我看来,你可以选择任何你想要的,只要它符合您的标准:

  • 它的秘密
  • 它检索你
  • 它有一个最起码的安全(不只是“123pw “)

所以你有两个类似的选项:

  • 使用Facebook Token作为“密码”
  • 使用由设计

产生通常在创建与设计一个Facebook的用户时生成的密码。我猜你在User.create -call中有类似:password => Devise.friendly_token[0,20]的代码?

加密密码通常为60个字符,Facebook令牌可以有up to 255 characters。所以我个人会选择Devise生成的密码。足够长的时间才能保证安全,并且不依赖于API来检索它。