2017-04-21 88 views
3

我已经为Google登录设置了devise + omniauth。它在网络上效果很好。我现在正在考虑将oauth登录集成到iOS/Android客户端。Omniauth策略外部设计

我一直在关注https://developers.google.com/identity/sign-in/ios/backend-auth,发现我用于oauth的库执行这些操作(https://github.com/zquestz/omniauth-google-oauth2/blob/master/lib/omniauth/strategies/google_oauth2.rb)。

我不清楚的是,如果我可以在常规Web工作流程之外使用omniauth策略(即从rails console)来构建伪request.env["omniauth.auth"]。有这样的可能吗?根据文档https://developers.google.com/identity/sign-in/ios/backend-auth#using-a-google-api-client-library我想在Ruby中做同样的事情(我不清楚如果我可以直接使用Devise来做到这一点)。

+0

你将不得不提供一些代码,某种例如到目前为止你已经尝试什么的,或者更深入地解释你想要达到的目标。你可以做一个伪'request'对象吗?当然,只要创建一个结构。但是否可以用它来完成任何事情取决于你想要做什么。 – anothermh

+0

@anothermh我已经添加了一些更多的细节 – Stussa

回答

-1

在控制台中模拟请求很简单。您可以轻松地发出请求app变量控制台提供:

app.get('/') # => 200 
app.response # => #<ActionDispatch::TestResponse:0x007fc73e4db220> 

至于处理认证,标准的Rails应用程序在网络上使用的cookie /基于会话的认证策略。首次进行身份验证后,会将一些信息存储在会话中(通常为cookie),以便您和服务器在每个请求中来回传递。

由于移动客户端不依赖于cookie,因此我们需要不同的身份验证策略:token-based authentication

这里高层次的实现,将与Omniauth工作:

  1. 用户通过Omniauth proivder通过使请求到Omniauth端点
  2. 应用程序处理的凭证
  3. 应用提供了一个签名令牌请求访问到客户端
  4. 客户端存储该令牌并将其与每个请求一起发送
  5. 服务器验证令牌并用数据响应

对于处理移动请求,您需要小心遵循供应商的Omniauth gem的细则。

令牌认证过去被烧入Devise,但它被删除。值得庆幸的是,还有一些添加令牌身份验证,制定一些宝石: