2016-11-06 6 views
0

私はちょうどRailsを学び始めていますので、愚かな質問を許してください。私のWebアプリケーションでは、私は巧妙に設定してからOmni-auth gemを使ってFacebookにリンクすることができました。しかし、2つのことが起こります。Facebookの画像とデータDevits in Railsを使用して

1)でログインしてFacebookは登録されません使用して署名する人 - ナビゲーションバーは、まだユーザーが自分のプロフィールの写真を表示することができますので、私はアバターを追加

2)「ログイン」を示しています。一方、定期的なユーザーは問題なく追加することができます。 Facebookでログインしているユーザーには画像が表示されません。

あなたが私に与えることができるどんな助けもとてもすばらしく、問題は私のuser.rbファイルにあるように感じます。私はすべての関連コードと私のgithubのURLを以下に挙げました。ありがとうございました:)

のGithub-URL:https://github.com/OmarZV/TY2

User.rb

class User < ApplicationRecord 

    devise :database_authenticatable, :registerable, 
    :recoverable, :rememberable, :trackable, :validatable, :omniauthable, omniauth_providers: [:facebook] 
has_attached_file :avatar, :styles => { :medium => "300x300>", :thumb => "100x100#" }, :default_url => "/images/:style/missing.png" 
validates_attachment_content_type :avatar, :content_type => /\Aimage\/.*\Z/ 
def self.from_omniauth(auth) 
    where(provider: auth.provider, uid: auth.uid).first_or_create do |user| 
user.email = auth.info.email 
user.password = Devise.friendly_token[0,20] 
user.name = auth.info.name 
user.image = auth.info.image 
    end 
end 
end 

Application_controller.rb

class ApplicationController < ActionController::Base 
    protect_from_forgery with: :exception 
before_action :configure_permitted_parameters, if: :devise_controller 
protected 
    def configure_permitted_parameters 
devise_parameter_sanitizer.permit(:sign_up, keys: [:username, :avatar]) 
devise_parameter_sanitizer.permit(:account_update, keys: [:username, :avatar]) 
    end 
end 

Application.html.erb

<div class="collapse navbar-collapse" id="navbar-collapse-1"> 
    <ul class="nav navbar-nav navbar-right"> 
     <li><%= link_to 'Posts', '#' %></li>   
     <% if current_user %> 
     <li><%= link_to 'Edit Profile',edit_user_registration_path %></li> 
     <li><%= link_to 'Logout', destroy_user_session_path, method: :delete %></li> 

     <li class="round-image-50"><%= image_tag(current_user.avatar.url(:thumb)) %></li> 

     <% else %> 
     <li><%= link_to 'Login', new_user_session_path %></li> 
     <% end %> 
    </ul> 
</div> 
</div><!-- /.navbar-collapse --> 

Omniauth_Callbacks_Controller

class Users::OmniauthCallbacksController<Devise::OmniauthCallbacksController 
def facebook 
# You need to implement the method below in your model(e.g.app/models/user.rb) 
@user = User.from_omniauth(request.env["omniauth.auth"]) 
if @user.persisted? 
sign_in_and_redirect @user, :event => :authentication #this will throw if @user is not activated 
set_flash_message(:notice, :success, :kind => "Facebook") if 
is_navigational_format? 
else 
session["devise.facebook_data"] = request.env["omniauth.auth"] 
redirect_to new_user_registration_url 
end 
end 
def failure 
redirect_to root_path 
end 
end 

答えて

0

Gorails.comでクリスは、このいずれかに私を助けました。この欠陥は2つの主要な領域にあり、誰かを助けることを願っています。

1)User.rbファイルには、私は調整する必要がペーパークリップを使用していて、私の環境/ initialzers/devise.rbファイルでクリップの宝石

def self.from_omniauth(auth) 
where(provider: auth.provider, uid: auth.uid).first_or_create do |user| 
    user.email = auth.info.email 
    user.password = Devise.friendly_token[0,20] 
    #user.name = auth.info.name 
    user.avatar = URI.parse(auth.info.image) 
end 
    end 

2)の使用のために調整する必要があります同じように。

config.omniauth:Facebookの、 "アプリケーションID"、 "アプリケーションの秘密"、secure_image_url:真、callback_url: "http://localhost:3000/users/auth/facebook/callback"

関連する問題