我在用戶模型中存儲用戶的Twitter訪問令牌時遇到了一些麻煩。我已按照Railscast #241安裝了Omniauth寶石,併成功設置了Twitter身份驗證,存儲了「uid」和「name」。爲了進行認證的Twitter API調用,我想存儲用戶的訪問令牌和訪問令牌密鑰,並因此創建了一個遷移來創建這些字段。我成功地做到了這一點,並且可以在Rails控制檯中成功地將這些字段分配給沒有存儲的記錄。但是,當嘗試驗證新用戶時,從一開始就提取這些信息,我會在標題中看到錯誤。下面是其他錯誤信息:SessionsController中的NoMethodError#create - 未定義的方法'[]'爲#<Oauth :: Access_Token ...>
app/models/user.rb:13:in `block in create_from_omniauth'
app/models/user.rb:10:in `create_from_omniauth'
app/models/user.rb:6:in `from_omniauth'
app/controllers/sessions_controller.rb:5:in `create'
我跟着下來從會話控制器到用戶模式這條道路,但無法弄清楚是什麼原因造成的錯誤。我在下面列入了這些文件。
會話控制器 類SessionsController < ApplicationController的
def create
user = User.from_omniauth(env["omniauth.auth"])
session[:user_id] = user.id
redirect_to root_url, notice: "Signed in"
end
def destroy
session[:user_id] = nil
redirect_to root_url, notice: "Signed out"
end
end
用戶模型
class User < ActiveRecord::Base
attr_accessible :name, :uid, :access_token, :access_token_secret
has_many :events
def self.from_omniauth(auth)
where(auth.slice('uid')).first || create_from_omniauth(auth)
end
def self.create_from_omniauth(auth)
create! do |user|
user.uid = auth["uid"]
user.name = auth["info"]["nickname"]
user.access_token = auth["extra"]["access_token"]["token"]
user.access_token_secret = auth["extra"]["access_token"]["secret"]
end
end
end
誰能幫我解決這個問題?我知道它與在create_from_omniauth方法中設置access_token字段有關,因爲沒有它們就可以正常工作。我一直在試圖弄清楚爲什麼這些行不通。預先感謝您的幫助。
非常感謝您幫助我解決問題! – dannymorty