【问题标题】:Using Twitter api to render profile image on rails app使用 Twitter api 在 Rails 应用程序上呈现个人资料图像
【发布时间】:2014-12-24 12:24:13
【问题描述】:

我一直在尝试在用户使用 twitter api 登录时呈现用户个人资料图片,但遇到了一些困难。此时没有错误,但图像未呈现。

gem 'twitter' 已安装。

这是我的 user.rb 文件

class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :omniauthable, :registerable,
     :recoverable, :rememberable, :trackable, :validatable

has_many :lines

def profile_image_uri(size = :mini)
parse_encoded_uri(insecure_uri(profile_image_uri_https(size))) unless @attrs[:profile_image_url_https].nil?
end

def self.find_for_twitter_oauth(auth, signed_in_resource=nil)


    user = User.where(:provider => auth.provider, :uid => auth.uid).first
    if user
      return user
    else
      registered_user = User.where(:email => auth.uid + "@twitter.com").first
      if registered_user
        return registered_user
      else

        user = User.create(name:auth.extra.raw_info.name,
                            provider:auth.provider, 
                            profile_image_url:auth.uid + "https://pbs.twimg.com/profile_images/2284174872/7df3h38zabcvjylnyfe3_mini.png",
                            uid:auth.uid,
                            email:auth.uid+"@twitter.com",
                            password:Devise.friendly_token[0,20],
                          )
        end

    end
  end

这是 application.html.erb 文件中的相关代码

  <% if user_signed_in? %>
   <li> <a href="#">  <img src="<%= current_user.profile_image_url %>"> <%= current_user.name %>  </a></li><li> 
    <%= link_to "Sign out", destroy_user_session_path,:method => :delete %></li>
    <% else %>
    <li><%= link_to user_omniauth_authorize_path(:twitter) do %>
          <img src="https://g.twimg.com/dev/sites/default/files/images_documentation/sign-in-with-twitter-link.png">
        <% end %>

    </li>

这是我的数据库中的 schema.rb 文件。我将 url 存储为字符串 profile_image_url。

 create_table "users", force: true do |t|
t.string   "email",                  default: "", null: false
t.string   "encrypted_password",     default: "", null: false
t.string   "reset_password_token"
t.datetime "reset_password_sent_at"
t.datetime "remember_created_at"
t.integer  "sign_in_count",          default: 0,  null: false
t.datetime "current_sign_in_at"
t.datetime "last_sign_in_at"
t.string   "current_sign_in_ip"
t.string   "last_sign_in_ip"
t.datetime "created_at"
t.datetime "updated_at"
t.string   "provider"
t.string   "uid"
t.string   "name"
t.string   "profile_image_url"

结束

对我做错了什么有什么建议吗?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 twitter-bootstrap twitter


    【解决方案1】:

    Auth Twitter Profile 图片 url 可以通过以下方式提取:

    auth[:extra][:raw_info][:profile_image_url]

      user = User.create(name:auth.extra.raw_info.name,
                            provider:auth.provider, 
                            profile_image_url: auth[:extra][:raw_info][:profile_image_url],
                            uid:auth.uid,
                            email:auth.uid+"@twitter.com",
                            password:Devise.friendly_token[0,20],
                          )
    

    【讨论】:

    • 我应该将此行添加到哪个文件?
    • 好的,谢谢。那是正确答案的一部分。当我完成如何将照片添加到 twitter auth 时,我将写一个指南并将其发布在这里。感谢您的帮助
    猜你喜欢
    • 2018-06-16
    • 2012-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-04
    • 1970-01-01
    • 2015-12-11
    相关资源
    最近更新 更多