Homeland 通过 omniauth 使用 twitter 遇到的问题

miclle · 2011年11月27日 · 最后由 lgn21st 回复于 2012年02月04日 · 3601 次阅读

一直很想试下 omniauth 我很菜,找到了这篇文章 http://railscasts.com/episodes/241-simple-omniauth 按其过程一路下来,注册好'CONSUMER_KEY', 'CONSUMER_SECRET' 最后 rake routes 时,说不能初始化: uninitialized constant OmniAuth::Strategies::Twitter 查到原因是还要添加 omniauth-twitter 这个 gem gem 'omniauth-twitter'

这时,rake routes 时: ``` /auth/:provider/callback(.:format) {:controller=>"sessions", :action=>"create"} signout /signout(.:format) {:controller=>"sessions", :action=>"destroy"}

当我访问http://localhost:3000/auth/twitter 时,成功跳转到twitter去登录,登录成功后返回时,出错:
```Started GET "/auth/twitter/callback?oauth_token=1RubhwlvzjEE9mfYIGiKD1ZIGUNBDFqgkLfV4jo6bU&oauth_verifier=OEUA0qLLZNpYunwDL1BnWSydCo4IbnUYqOCTzZ33goo" for 127.0.0.1 at 2011-11-26 22:32:30 +0800
  Processing by SessionsController#create as HTML
  Parameters: {"oauth_token"=>"1RubhwlvzjEE9mfYIGiKD1ZIGUNBDFqgkLfV4jo6bU", "oauth_verifier"=>"OEUA0qLLZNpYunwDL1BnWSydCo4IbnUYqOCTzZ33goo", "provider"=>"twitter"}
  User Load (0.5ms)  SELECT `users`.* FROM `users` WHERE `users`.`provider` = 'twitter' AND `users`.`uid` = '18209844' LIMIT 1
Completed 500 Internal Server Error in 71ms

Started GET "/auth/failure?message=invalid_response" for 127.0.0.1 at 2011-11-26 22:32:34 +0800
ActionController::RoutingError (No route matches [GET] "/auth/failure"):

原因我查了很久,一直以为是 twtter 处配置的问题,后来,看了 log,请求已经成功返回,带有验证后的数据,问题出在 ```user = User.find_by_provider_and_uid(auth["provider"], auth["uid"]) || User.create_with_omniauth(auth)

继续log往下找时,在User中的create_with_omniauth方法中,看到有auth["provider"],auth["uid"]以及auth["user_info"]["name"],
好吧,我将auth打印出来,我找到了provider,uid,就是找不到user_info,但我找到了name...
我觉得我已经找到问题所在,auth["user_info"]["name"] 修改成 auth["name"] 后,重试果然成功 

自己动手,一步一步排查,最终找到问题,赞一个,不过能否用

连续的三个"`"符号将代码格式化一下
需要 登录 后方可回复, 如果你还没有账号请 注册新账号