是的,你应该这样做。
基本上,OAuth 使用回调数据为验证用户提供令牌。
例如
- 用户点击“登录”(或其他)链接,您的应用会将他们重定向到 OAuth 提供程序(或在 iframe 中打开)。
- 用户允许您的应用使用他们的个人资料详细信息
- OAuth 提供商使用唯一代码向您的应用发送回调
- 应用使用该代码获取 API 通信的安全访问令牌
这只是一个基本示例。
在您的情况下,您需要实现将解析回调数据的控制器。
这是代码示例
@oauth = Koala::Facebook::OAuth.new(api_key, app_secret, callback_url)
=> #<Koala::Facebook::OAuth:0x007fc919d014e0 @app_id=1234567890, @app_secret="FaKeAppSecretKey", @oauth_callback_url="http://localhost:3000/callback">
@oauth.url_for_oauth_code
=> "https://www.facebook.com/dialog/oauth?client_id=893637180663238&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fcallback"
当你转到https://www.facebook.com/dialog/oauth?client_id=893637180663238&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fcallback 时,FB 会将你重定向到
http://localhost:3000/callback?code=CODE_FROM_CALLBACK
那么你应该使用实现控制器,使用代码来获取访问令牌
access_token = @oauth.get_access_token(params[:code])
=> "ACCESS_TOKEN"
@graph = Koala::Facebook::API.new(access_token)
=> #<Koala::Facebook::API:0x007fc91a903ae0 @access_token="ACCESS_TOKEN", @app_secret=nil>
profile = @graph.get_object("me")
=> {"id"=>"4492344324865", "email"=>"my_fake_email_address@gmail.com", "first_name"=>"Roman", "gender"=>"male", "last_name"=>"Sotnikov", "link"=>"https://www.facebook.com/app_scoped_user_id/4492344324865/", "locale"=>"en_US", "name"=>"Roman Sotnikov", "timezone"=>6, "updated_time"=>"2015-05-18T05:19:54+0000", "verified"=>true}
请查看https://github.com/arsduo/koala/wiki/OAuth 了解更多信息。