【问题标题】:Unable to find Twitter uid from Users Table无法从用户表中找到 Twitter uid
【发布时间】:2014-07-17 06:58:56
【问题描述】:

我一直在尝试使用 Omniauth-Twitter,但遇到了一个令人恼火的问题。我无法将我的会话 ID 与存储的 Twitter uid 匹配。我使用 Ryan Bates 的截屏视频来帮助我完成演练。

这是我的会话控制器:

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.uid
  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
def self.create_with_omniauth(auth)
  create! do |user|
    user.provider = auth["provider"]
    user.uid = auth["uid"]
    user.name = auth["info"]["name"]
  end
end
end

这是我的应用程序控制器,它应该能够将我的 Twitter 角色分配给当前用户变量:

class ApplicationController < ActionController::Base
helper_method :current_user

private

def current_user
  @current_user ||= User.find(session[:user_id]) if session[:user_id]
end
end

在前端,我试图基本上显示用户名,如下所示:

<% if current_user %>
Welcome <%= current_user.name %>!
<%= link_to "Sign Out", signout_path %>
<% else %>
<%= link_to "Sign in with Twitter", "/auth/twitter" %>

当我运行应用程序并点击“使用 Twitter 登录”时,我收到一条错误消息:

“ActiveRecord::RecordNotFound。找不到 id=”的用户

服务器突出显示 current_user 方法作为错误点。任何帮助,将不胜感激?如果需要,我很乐意提供更多信息。

【问题讨论】:

    标签: ruby-on-rails twitter omniauth twitter-oauth


    【解决方案1】:

    您将用户id(由数据库自动分配)与uid(Twitter 的ID)混淆了。要么:

    1. session[:user_id] = user.uid 更改为session[:user_id] = user.id。或者

    2. 改变

      def current_user
        @current_user ||= User.find(session[:user_id]) if session[:user_id]
      end
      

      def current_user
        @current_user ||= User.find_by(uid: session[:user_id]) if session[:user_id]
      end
      

    就个人而言,我会选择第一个选项。

    【讨论】:

    • 工作就像一个魅力! StackOverflow 不希望我发表感谢评论,但无论如何我都会这样做。谢谢!
    猜你喜欢
    • 2012-12-22
    • 2021-07-02
    • 2015-07-31
    • 1970-01-01
    • 1970-01-01
    • 2015-11-02
    • 2014-11-04
    • 1970-01-01
    • 2020-03-29
    相关资源
    最近更新 更多