我认为你有正确的计划。我们在我们的应用程序和Web服务中完全实现了这一点。
应用程序使用REST API,基本身份验证通过HTTPS,由服务器生成密码,所有这些都是在没有Devise的情况下实现的。控制器中有一种方法,所有API控制器都继承自它,它是所有API方法的before_action,并且调用'authenticate_or_request_with_http_basic'
class ApiController < ActionController::Base
before_action :authenticate_api
def authenticate_api
authenticate_or_request_with_http_basic do |username, password|
end
end
end
这样就处理了大多数请求。
我们还有一个API控制器操作,可以从设备上注册一次,以获取由服务器生成的密码:
class UsersController < ApiController
skip_before_action :authenticate_api, only: [:register_fb]
def register_fb
graph = Koala::Facebook::API.new(params.require("access_token"))
profile = graph.get_object("me?fields=email,first_name,last_name")
end
end
然而,Web应用程序中的所有控制器都继承自WebappController并使用devise。
因此,用户对象上有两个密码(一个用于Web,一个用于移动设备),以及Facebook ID和我们自己的用户ID,这是我们用于身份验证的ID。