嗨,我正在尝试运行 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”
配置/初始化程序中的 Omniauth.rb:
Rails.application.config.middleware.use OmniAuth::Builder do
provider :twitter, 'CONSUMER_KEY', 'CONSUMER_SECRET'
end
(我已经提供了消费者密钥和秘密)
应用程序.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
我不知道我哪里出错了