使用Twitter Reverse Auth在rails后端创建用户

时间:2014-02-12 17:11:05

标签: ios ruby-on-rails twitter devise omniauth

我正在使用在Rails上编写的后端/配套网站构建iOS应用程序。

我已按照rails cast
中的说明设置了devise和omniauth-twitter http://railscasts.com/episodes/235-devise-and-omniauth-revised

我还执行了twitter反向身份验证以获得设备上的oauth令牌,如此处所述 https://dev.twitter.com/docs/ios/using-reverse-auth

现在我要做的是将令牌发送到服务器并在我的数据库中创建一个设备用户 创建用户的理想方式是什么?这种情况是否支持我当前设置的开箱即用,还是我必须编写一些自定义代码?

2 个答案:

答案 0 :(得分:1)

我几天一直在研究同样的事情。

我相信omniauth-twitter不适用于Twitter反向身份验证。

我认为解决方案是发送您收到的oauth_tokenoauth_token_secret 从iOS上的反向身份验证过程到应用程序中的自定义端点。 注意,我正在自己实施这个过程;它应该工作,但尚未测试。

您可以使用twitter API来验证凭据。这是rails应用程序的实际身份验证步骤。这样的事情(未经测试的代码):

  consumer = OAuth::Consumer.new(TWITTER_APP_ID,
                                 TWITTER_APP_SECRET,
                                 { site: 'https://api.twitter.com' })
  access_token_token = ::OAuth::AccessToken.new(consumer,
                                                params[:oauth_token],
                                                params[:oauth_token_secret])
  MultiJson.load(access_token.get('/1.1/account/verify_credentials.json?include_entities=false&skip_status=true')).body

(这与omniauth-twitter gem获取访问令牌后的作用相同 所以从这里你需要:

  • 处理上述请求中的非200响应
  • 从返回的哈希中读取用户ID,在数据库中搜索具有现有Twitter用户ID的现有用户。如果存在,请将他登录。如果不存在,请创建一个新用户并签到他。

以下是更多信息:

  • 我的第一个想法是直接通过omniauth-twitter点击Twitter回调提供程序。但在这种情况下,您需要传递2个参数:oauth_token,这是您从iOS上的反向身份验证获得的请求令牌,以及oauth_verifier参数,我不知道如何进入iOS (使用标准Web流程,用户被重定向回您的回调,此参数将从twitter传递)。

  • 反向身份验证的缺点似乎是您需要在应用程序二进制文件中嵌入App秘密。在服务器端执行此步骤似乎是一个好主意(我在这里看到了这个想法:https://github.com/drudge/passport-twitter-token/#performing-twitter-reverse-auth-step-1-server-side

答案 1 :(得分:0)

我刚刚在用户点击“通过Twitter注册”时创建了一个UIWebview。在你的ios中按钮,然后按照与我的rails应用程序相同的过程。

一旦用户通过推特注册,全部由服务器处理,您就可以重定向回注册并登录的ios应用程序,从而无需处理应用程序中的所有令牌和请求。