我正在构建一个javascript前端和一个Rails REST API后端。用户只能使用Facebook登录。对于这样的事情,最好的架构是什么?我是Rails和REST新手,但到目前为止我正在思考这个问题:
有人可以指出我正确的方向吗?谢谢!
答案 0 :(得分:1)
这是正确的,我实际上是使用相同的概念开发应用程序,但通过谷歌登录。
如果您打算合并联合登录,那么您要寻找的是Facebook或OpenID的OAuth 2.0。
所以是的,基本上你所说的是正确的。您从客户端获取授权令牌,向服务器发送请求,您应该拥有一个身份验证方法,通过向该令牌发送用户信息的GET请求来检查令牌的有效性。获得响应后,您应该返回JSON中的信息或错误,具体取决于您从GET请求中获取的数据。
这应该指向正确的方向。希望这会有所帮助。
答案 1 :(得分:1)
@Leo给了你一个接近的方向。
另一种方法是使用Devise。
将Devise配置为Token Authenticatable 这里的步骤:http://matteomelani.wordpress.com/2011/10/17/authentication-for-mobile-devices/
在initializers / devise.rb中设置config.skip_session_storage = [:token_auth]
,以便不存储会话,并且每次都必须发送令牌ID
定义如下函数。此函数验证您发送的FB访问令牌是否正确以及它是否与FB ID相对应。我们必须在调用valid_password的地方使用此函数,因为我们的数据库中没有用户创建的密码。但我们必须从Facebook验证。
def self.valid_password_custom?(password, fbid)
uri = URI.parse("https://graph.facebook.com/me")
fb_params = {"access_token"=>password}
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Get.new(uri.path)
request.set_form_data( fb_params )
request = Net::HTTP::Get.new( uri.path + "?" + request.body )
response = http.request(request)
json_response = JSON.parse(response.body)
if json_response["id"] == fbid
logger.debug("FB Access token is valid for the user")
return true
else
logger.debug("FB Access token is not valid for the user. ID for access token is '#{fbid}'")
return false
end
end
设置完上述步骤后,您将从设计中获取令牌。您可以使用它与API进行通信