在具有标准设计+facebook 登录的标准当前 ruby on rails 应用程序中,我正在构建 API。应用程序必须准备好使用 node.js 或/和 angular.js 编写的单独前端。在 RoR 方面,我使用标准 token 访问保护 API:
private
def authenticate_user_from_token!
user_email = params[:email].presence
user = user_email && User.find_by_email(user_email)
# Notice how we use Devise.secure_compare to compare the token
# in the database with the token given in the params, mitigating
# timing attacks.
if user && Devise.secure_compare(user.authentication_token, params[:token])
sign_in user, store: false
end
end
现在的工作流程是如何使用 facebook 或任何其他 omniauth 提供商进行登录/注册。我最简单的想法是为前端提供链接,例如
<a href="http://somewhere:8080/users/auth/facebook?target=http://somewhere:80/login.php">Facebook</a>
让 rails(facebook-omniauth) 完成 facebook 身份验证的工作,并从 rails(omiauthcallback controller) 响应重定向到我们已经传递的目标 url(frontend) +
&token=abcded
作为该用户的 token 。让前端存储 token 并在与 API 对话时在每个请求中使用它
上面的工作流程有效,但肯定可以做得更好。什么是最佳实践?
如何让前端完成工作并在 facebook 中验证用户? (passport.js) 然后将 facebook-info 重新发送到 API 并将此信息存储在那里?
让后端完成工作并验证 facebook 中的用户(设计 omniauth)。我仍然可以使用 session
sign_in user, store: true
并且不需要 token ?只是将浏览器重定向到前端?
谢谢。
最佳答案
从客户端应用程序获得 OmniAuth 请求将使您的应用程序更具可扩展性。这样服务器就不必等待 Facebook 的响应并阻止您的 Rails 集群。如果安全对您来说是个问题,那么您可能希望您的 api 通过 https 与客户端应用程序通信。
关于ruby-on-rails - 工作流程和安全? Ruby on Rails API,用于使用 facebook 登录的分离前端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23600714/