我计划使用rails-api 为iOS 移动应用程序提供JSON API 来使用。过程:
fb_access_token
并将其发布到API服务器以识别用户fb_access_token
api_token
响应进行所有后续通信。哪种身份验证应该是此应用程序的最佳选择? oAuth2 还是 BasicAuth?我尝试了带有doorkeeper的rails-api,但它不能开箱即用,因为doorkeeper需要一些资产。
我正在为此与设备集成进行基本身份验证。
首先,我从移动应用程序获取发布参数(access_token 和其他内容)。
然后我使用 open-api 从 facebook 获取用户详细信息:
url = "https://graph.facebook.com/me?access_token="
begin
content = open(URI.encode(url + params[:user][:access_token]))
rescue OpenURI::HTTPError #with this I handle if the access token is not ok
return render :json => {:error => "not_good_access_token" }
end
现在 Facebook 返回响应
status = content.status[0]
content = ActiveSupport::JSON.decode(content)
if status == "200"
#get the email and check if the user is already in the database. If there is not email, check by the facebook id
#If the user exists return the user. If the user does not exists create new
希望这有帮助
您也可以为 google 使用相同的代码,只需将 url 更改为“https://www.googleapis.com/oauth2/v2/userinfo?access_token=”
我会尝试使用 omniauth-facebook,因为它使用 OAuth2 并且非常易于使用。所有的omniauth策略都是rails中间件,所以你只需要将
gem 'omniauth-facebook'
添加到你的gemfile中,并将以下内容添加到config/initializers/omniauth.rb
,你就可以使用/auth/facebook
通过facebook登录,并使用/auth/facebook/callback
创建用户会话(您可能想要更改 :display 键值,因为移动设备中的弹出窗口可能不美观):
Rails.application.config.middleware.use OmniAuth::Builder do
provider :facebook, ENV['FACEBOOK_KEY'], ENV['FACEBOOK_SECRET'],
:scope => 'email,user_birthday,read_stream', :display => 'popup'
end
Facebook 身份验证令牌将位于返回到您的回调端点的
request.env['omniauth.auth'][:credentials][:token]
中,您可以将其集成到您的移动身份验证策略中。请参阅上面的链接和 omniauth 主页 了解更多详细信息。