gpt4 book ai didi

ruby-on-rails - Rails + OmniAuth Facebook : how to obtain Access Token?

转载 作者:数据小太阳 更新时间:2023-10-29 07:56:21 25 4
gpt4 key购买 nike

我正在尝试从 Facebook 获取好友列表。通过 Facebook 登录不是问题,但问题是获取用户的 friend - 因为 access token

puts request.env["omniauth.auth"].inspect
puts '==='
@user = User.find_for_facebook_oauth(request.env["omniauth.auth"], current_user)
@fb_user = FbGraph::User.fetch(@user.uid).friends
puts @fb_user.inspect

问题出在第 4 行 - 在这种情况下我收到错误

OAuthException :: An access token is required to request this resource.

当我把这样的东西放在那里时:

@fb_user = FbGraph::User.fetch(request.env["omniauth.auth"].credentials.token).friends

我会得到

OAuthException :: (#803) Some of the aliases you requested do not exist: PRINTED OUT TOKEN

获取访问 token 的正确方法是什么?

编辑:电流

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
def facebook
@user = User.find_for_facebook_oauth(request.env["omniauth.auth"], current_user)
@fb_user = FbGraph::User.fetch(request.env["omniauth.auth"].credentials.token).friends
if !@user
flash[:error] = 'This email address is already used in the system.'
redirect_to :back
elsif @user.persisted?
flash[:notice] = I18n.t "devise.omniauth_callbacks.success", :kind => "Facebook"
sign_in_and_redirect @user, :event => :authentication
else
session["devise.facebook_data"] = request.env["omniauth.auth"]
redirect_to new_user_registration_url
end
end

用户模型中:

  def self.find_for_facebook_oauth(access_token, signed_in_resource=nil)
data = access_token.extra.raw_info
if user = User.where(:provider => 'facebook', :uid => data.id).first
user
elsif user = User.where('email = ? AND provider IS NULL', data.email).first
return false
else
...saving data...
end
return user if user
end

最佳答案

您可以通过 Facebook Graph API Explorer 获得用于测试目的的访问 token .确保选择要访问的正确字段,然后单击“获取访问 token ”。一个更永久的解决方案是在 Facebook 注册您的应用程序,这样您就可以在 token 消失的情况下不断发出请求。

你应该查看 Facebook OAuth dialogue .

我假设您正在尝试使用 OAuth2 策略而不是 Javascript SDK。确保你已经像这样设置了一个回调 url:

client.redirect_uri = "http://your.client.com/facebook/callback"

在处理回调的 Controller 中,您应该执行如下操作:

client.authorization_code = params[:code] 
access_token = client.access_token! :client_auth_body
FbGraph::User.me(access_token).fetch

确保您已让 fb_graph 知道您应用的 ID 和密码。你应该看看this stackoverflow确保您的应用信息安全。

我还会插入 koala gem

关于ruby-on-rails - Rails + OmniAuth Facebook : how to obtain Access Token?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18106729/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com