Я новичок, пытающийся добавить facebook login в мое приложение rails, используя omniauth & 2 и omniauth-facebook. Я следовал инструкциям на https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview.Facebook логин с omniauth не работает
Но теперь он показывает мне ошибку ниже, я обыскал сеть и пробовал много разных способов без особого успеха, я понятия не имею, что я делаю неправильно, поэтому могу ли я помочь кому-то с этим? очень признателен.
Бег на
рельсов (3.2.12) Используя oauth2 (0.8.1) Используя OmniAuth (1.1.4) Используя OmniAuth-oauth2 (1.1.1) Использование OmniAuth-Facebook (1.4. 1)
Ошибка: ActiveRecord :: RecordNotFound в UsersController # показать не удалось найти пользователя с идентификатором = sign_up
Мой код
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :token_authenticatable, :confirmable,
# :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable, :omniauthable, :omniauth_providers => [:facebook]
# Setup accessible (or protected) attributes for your model
attr_accessible :email, :password, :password_confirmation, :remember_me, :name, :provider, :uid, :name
attr_accessible :title, :date_of_birth, :firstName, :lastName, :mailId, :phone, :provider, :uid
protected
def self.find_for_facebook_oauth(auth, signed_in_resource=nil)
user = User.find(:provider => auth.provider, :uid => auth.uid).first
unless user
user = User.create(name:auth.extra.raw_info.name,
provider:auth.provider,
uid:auth.uid,
email:auth.info.email,
password:Devise.friendly_token[0,20]
)
end
user
end
def self.new_with_session(params, session)
super.tap do |user|
if data = session["devise.facebook_data"] && session["devise.facebook_data"]["extra"]["raw_info"]
user.email = data["email"] if user.email.blank?
end
end
end
has_many :pins, :dependent => :destroy
конец
devise.rb
require 'devise/orm/active_record'
require 'omniauth-facebook'
config.omniauth_path_prefix = "https://stackoverflow.com/users/auth"
config.omniauth :facebook, "XXXX", "XXXX", {:client_options => { :ssl => { :verify => false } }}
end
routes.rb
Dine::Application.routes.draw do
get "home/index"
resources :pins
resources :pin
resources :users
match '/auth/facebook' => 'omniauth#passthru'
devise_scope :user do
get '/users/auth/:provider' => 'users/omniauth_callbacks#passthru'
devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" } , :strategy_class => OmniAuth::Strategies::Facebook
match 'users/:id' => 'users#show', as: :user
root :to => 'pins#index'
get 'about' => 'pages#about'
get 'weekly' => 'pages#weekly'
get 'shop' => 'pages#shop'
get 'service' => 'pages#service'
get 'privacy' => 'pages#privacy'
get 'test' => 'pages#test'
get 'recipies' => '[email protected]'
match 'contact' => 'contact#new', :as => 'contact', :via => :get
match 'contact' => 'contact#create', :as => 'contact', :via => :post
end
end
OmniauthCallbacksController
class OmniauthCallbacksController < Devise::OmniauthCallbacksController
def passthru
send(params[:provider]) if providers.include?(params[:provider])
end
protected
def facebook
raise "Implement me for facebook"
end
def twitter
raise "Implement me for twitter"
end
private
def providers
["facebook", "twitter"]
end
end
UsersController
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
@pins = @user.pins.page(params[:page]).per_page(20)
end
end
new.html.erb
<h2>登入</h2>
<%= simple_form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| %>
<div class="form-inputs">
<%= f.input :email, :required => false, :autofocus => true %>
<%= f.input :password, :required => false %>
<%= f.input :remember_me, :as => :boolean if devise_mapping.rememberable? %>
</div>
<%= link_to "Sign in with Facebook", user_omniauth_authorize_path(:facebook) %>
<div class="form-actions">
<%= f.button :submit, "Sign in" %>
</div>
<% end %>
<%= render "devise/shared/links" %>
Ваша ошибка в методе showController. возможно, вы должны опубликовать этот ... – Miotsu
@Miotsu, я только что обновил UserController. Однако в учебнике никогда не упоминалось об изменении чего-либо в UserController. –
Итак, сообщение об ошибке, которое вы получаете, сообщает вам, что вы передаете знак «sign_up» в своих параметрах [: id]. Посмотрите на ссылку/представление/все, что вызывает этот метод, и дважды проверьте параметры, которые вы передаете. – Miotsu