[英]NoMethodError in Devise::SessionsController#create undefined method `current_sign_in_at'
[英]NoMethodError in SessionsController#create - Undefined method '[]' for #<Oauth::Access_Token…>
我在用户模型中存储用户的Twitter访问令牌时遇到了一些麻烦。 我已经按照Railscast#241安装了Omniauth gem,并成功设置了Twitter身份验证,并存储了“ uid”和“ name”。 为了进行经过身份验证的Twitter API调用,我想存储用户的访问令牌和访问令牌密钥,因此创建了迁移以创建这些字段。 我做到了这一点,并且可以在Rails控制台中成功地将那些字段分配给没有存储的记录。 但是,当尝试对新用户进行身份验证并从一开始就获取此信息时,出现标题中列出的错误。 这里是其他错误信息:
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字段有关,因为没有它们就可以正常工作。 我一直在想办法弄清楚为什么这些都不起作用。 在此先感谢您的帮助。
我怀疑为什么您需要保存这些令牌,因为它们看起来毫无用处。 在这种情况下,最重要的是Twitter返回的用于标识或创建用户的uid。
无论如何,您的错误原因是没有这样的键。
auth['extra']['access_token']
是一个字符串,没有其他子键。
:extra => {
:access_token => "", # An OAuth::AccessToken object
要访问token
和secret
,可以使用auth['credentials']
:credentials => {
:token => "a1b2c3d4...", # The OAuth 2.0 access token
:secret => "abcdef1234"
},
参考:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.