【发布时间】:2012-11-21 20:43:54
【问题描述】:
嗨,我正在尝试运行 Railscast 的 #241 - 使用 Omniauth 进行 twitter - 最终使用 facebook。我尝试制作的应用程序需要 Facebook 的登录,但由于有一个关于如何使用 twitter 登录的视频,不妨先关注它,但我遇到了问题。
我在登录 Twitter 后不断收到此错误消息。 “SessionController#create 中的 NoMethodError” - nil:NilClass 的未定义方法“[]”。这是相关代码。
class SessionsController < ApplicationController
def create
auth = request.env["omniauth.auth"]
user = User.find_by_provider_and_uid(auth["provider"], auth["uid"]) || User.create_with_omniauth(auth)
session[:user_id] = user.id
redirect_to root_url, :notice => "Signed in!"
end
end
我还通过 dev.twitter.com 设置了网站和回调链接,如下所示: 网站:“http://127.0.0.1:3000” 回调:“http://127.0.0.1:3000/auth/twitter/callback”
config/initializers 中的 Omniauth.rb:
Rails.application.config.middleware.use OmniAuth::Builder do
provider :twitter, 'CONSUMER_KEY', 'CONSUMER_SECRET'
end
(我已经提供了消费者密钥和秘密)
Application.html.erb
<div id="user_nav">
<%= link_to "Sign in with Twitter", "/auth/twitter" %>
</div>
在 routes.rb 中添加了这一行
match "/auth/:provider/callback" => "sessions#create"
用户.rb
class User < ActiveRecord::Base
attr_accessible :name, :provider, :uid
def self.create_with_omniauth(auth)
create! do |user|
user.provider = auth["provider"]
user.uid = auth["uid"]
user.name = auth["user_info"]["name"]
end
end
我不知道我哪里错了
【问题讨论】:
-
是因为我的数据库中没有“twitter”用户吗?但不可能,因为我使用 twitter 登录,因此它不需要匹配我的 User 表。虽然我想增加他们的登录凭据并将其放入我的数据库并为他们创建一个登录名
标签: omniauth