0

我在这上面花了几个小时,所以我在这里。从 Ryans Railscast 开始,我决定将 twitter 登录添加到我的 rails / devise 应用程序中。我关注了一段时间,遇到了问题并解决了各种问题,直到我到达这里:单击“使用 twitter 登录”时,我被重定向到那里,返回后,我收到以下问题:

ActiveRecord::StatementInvalid in Users::OmniauthCallbacksController#twitter

SQLite3::SQLException: 没有这样的列:users.provider: SELECT "users".* FROM "users" WHERE "users"."provider" = 'twitter' AND "users"."uid" = '20323034' ORDER BY"用户"."id" ASC 限制 1

这个问题与其他 stackoverflow 问题非常接近,除了他们使用的是 facebook 登录而不是 twitter。请参阅最佳答案的最佳评论:

设计、Omniauth 和 Facebook 集成会话错误

请指教,谢谢!

路线:devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks", :registrations => "registrations" } 做

获取“信息/联系人”获取“信息/关于”获取“信息/登陆”获取“信息/测试”获取“/users/sign_out”=>“设计/会话#destroy”

根“信息#登陆”结束

资源:事件做资源:注册结束结束

宝石文件:

宝石'zurb-基础'

宝石“设计”

宝石'omniauth-twitter'

宝石'omniauth'

宝石'oauth2'

4

1 回答 1

3

我将尝试用更彻底的答案来回应,但对于初学者来说,这个错误被抛出,因为你还没有在你的用户模型中添加列来存储提供者名称(即“twitter”)。您还需要存储 twitter 访问令牌、twitter uid 和 twitter 密码。Facebook Omniauth 只需要提供者、access_token 和 uid 列,但 Twitter 需要存储除这些之外的秘密。

您在控制器中使用什么逻辑?

从终端运行以下迁移: rails g migration AddTwitterColumnsToUsers

class AddTwitterColumnsToUsers < ActiveRecord::Migration
  def change
    add_column :users, :provider, :string
    add_column :users, :access_token, :string
    add_column :users, :uid, :string
    add_column :users, :twitter_secret, :string
  end
end

然后从终端: rake db:migrate

于 2013-09-25T00:38:42.633 回答