abh*_*ash 8 devise access-token facebook-login
我正在为移动应用程序创建一个用于rails的api.现在用户将使用Facebook登录,我将收到facebook身份验证后的访问令牌.我必须使用此访问令牌并检查应用程序数据库中是否存在访问令牌.如果是,则允许用户访问,如果没有,则检查电子邮件并更新访问令牌并允许用户访问.
我如何通过omniauth-facebook和设计实现这一点,据我所知omniauth-facebook从头开始做所有事情,找不到只提供访问令牌到omniauth-facebook的方法.
任何帮助都会很棒.
gre*_*ont 15
你不需要omniauth-facebook.此gem的目的仅是获取访问令牌(并查询用户的信息).以下是标准设置中的事情(使用Devise和omniauth-facebook):
(有关详细信息,请参阅Devise关于Omniauth的文档)
现在,鉴于您已经拥有访问令牌,并且从Facebook的API获取用户的信息非常简单,您实际上并不需要omniauth-facebook.
您需要做的就是写一个动作:
此代码基于Devise文档中给出的示例.
class Users::FacebookCallbacksController
def facebook
# You should test if params[:access_token] is present
# and if this request fails
facebook_data = HTTParty.get("https://graph.facebook.com/me", query: {
access_token: params[:access_token]
}).parsed_response
# You need to implement the method below in your model (e.g. app/models/user.rb)
@user = User.find_for_facebook_oauth(facebook_data)
if @user.persisted?
sign_in_and_redirect @user, :event => :authentication #this will throw if @user is not activated
set_flash_message(:notice, :success, :kind => "Facebook") if is_navigational_format?
else
session["devise.facebook_data"] = facebook_data
redirect_to new_user_registration_url
end
end
end
Run Code Online (Sandbox Code Playgroud)
笔记:
sign_in_and_redirect,set_flash_message并且is_navigational_format?是Devise提供的帮手User.find_for_facebook_oauth| 归档时间: |
|
| 查看次数: |
2237 次 |
| 最近记录: |