您好我正在尝试运行Railscast的#241 - 使用Omniauth进行推特 - 最终使用facebook。我正在尝试制作的应用程序需要Facebook登录,但由于有关于如何使用Twitter登录的视频,不妨先说一下,但我遇到了问题。
我在登录Twitter后不断收到此错误。 “SessionController中的NoMethodError #create” - 未定义的方法`[]'为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
(我已经提供了消费者密钥和秘密)
Application.html.erb
<div id="user_nav">
<%= link_to "Sign in with Twitter", "/auth/twitter" %>
</div>
在routes.rb
中添加了这一行match "/auth/:provider/callback" => "sessions#create"
User.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
我不知道我哪里出错了
答案 0 :(得分:1)
好的,我发现了问题。花了我一会儿。
Twitter将“user_info”元素更改为“info” 而不是
user.name = auth["user_info"]["name"]
它是
user.name = auth["info"]["name"]
接下来要改变的是来自
的会话控制器session[:user_id] = user.id
到
session[:user_id] = user.uid