我有一个rails应用程序,我的用户可以使用Devise gem和Omniauth-facebook gem登录 . 他们可以是“普通”用户或Facebook用户 . 所有这一切都正常 .
我在这个应用程序中的API也由门卫进行身份验证 . 从我的移动客户端,我可以发送用户和密码,他们可以使用access_token访问我的API . 这工作正常 .
现在,我希望我的Facebook用户能够通过他们的Facebook登录从移动应用程序访问我的API . 有人知道我怎么能做到这一点?用facebook登录后,我将有一个令牌,我将能够访问有关用户的一些信息...但我如何连接到API?
注意:当您使用Facebook登录rails应用程序时,Devise会创建一个包含提供程序和uid字段的新用户 .
有任何想法吗?非常感谢 .
2 回答
我想你正在寻找https://github.com/doorkeeper-gem/doorkeeper-grants_assertion
我通过以下步骤实现了这一目标:
通过客户端的facebook SDK检索Facebook
公开像
/facebook/login?facebook_token=XXX
这样的API一旦我从客户端获得facebook_token,我使用Koala从Facebook检索用户的信息(包括电子邮件)
通过电子邮件验证用户
为该用户生成
Doorkeeper::Token
并将其发送回客户端