我已经花了几个小时,所以我在这里 . 从Ryans Railscast开始,我决定将twitter登录添加到我的rails / devise应用程序中 . 我跟踪了一下,遇到问题并解决了各种问题,直到我到达这里:当点击“使用Twitter登录”时,我被重定向到那里并在返回时,我得到以下问题:
用户:: OmniauthCallbacksController #twitter中的ActiveRecord :: StatementInvalid
SQLite3 :: SQLException:没有这样的列:users.provider:SELECT“users” . * FROM“users”WHERE“users” . “provider”='twitter'和“users” . “uid”='20323034'ORDER BY“用户“ . ”id“ASC LIMIT 1
这个问题非常接近这个其他stackoverflow问题,除了他们使用的是facebook登录而不是twitter . 请参阅最佳答案:
Devise, Omniauth and Facebook integration session error
请指教,谢谢!
routes:devise_for:users,:controllers => {:omniauth_callbacks =>“users / omniauth_callbacks”,:registrations =>“registrations”} do
得到“信息/联系”得到“信息/关于”获取“信息/登陆”获取“信息/测试”获取'/ users / sign_out'=>'设计/会话#stroy'
root“info#landing”结束
资源:事件做资源:注册结束
的Gemfile:
宝石'zurb-foundation'
宝石'设计'
宝石'omniauth-twitter'
宝石'omniauth'
宝石'oauth2'
1 回答
我将尝试以更彻底的答案作出回应,但对于初学者而言,此错误正在被抛出,因为您尚未向用户模型添加列以存储提供者名称(即“twitter”) . 您还需要存储twitter访问令牌,twitter uid和twitter secret . Facebook Omniauth只需要提供者,access_token和uid列,但除了这些之外,Twitter还需要存储一个秘密 .
你在控制器中使用了什么逻辑?
从终端运行以下迁移:rails g migration AddTwitterColumnsToUsers
然后从终端:rake db:migrate