Приложение Rails 3 - лучший способ связаться с Facebook - PullRequest
1 голос
/ 04 февраля 2012

Мы новички в рельсах и надеемся использовать кнопку Javascript SDK "Connect with Facebook" на нашей домашней странице. Используя эту кнопку в нашем приложении, мы хотим, чтобы пользователи могли регистрироваться на нашем сайте через Facebook, и иметь возможность использовать свое изображение профиля Facebook в качестве своего изображения профиля для нашего веб-приложения.

Как лучше всего реализовать это соединение Facebook с нашим приложением Rails 3?

  devise_for :users

  resources :authentications

  resources :users do
      member do
        get :following, :followers
      end
  end
  resources :sessions,   :only => [:new, :create, :destroy]
  resources :microposts, :only => [:create, :destroy]
  resources :relationships, :only => [:create, :destroy]

  match '/signup',  :to => 'users#new'
  match '/signin',  :to => 'sessions#new'
  match '/signout', :to => 'sessions#destroy'
  match '/contact', :to => 'pages#contact'
  match '/home',   :to => 'pages#home'
  match '/help',    :to => 'pages#help'
  match '/feedback',    :to => 'pages#feedback'
  match '/privacy',    :to => 'pages#privacy'
  match '/terms',    :to => 'pages#terms'
  match '/',        :to => 'pages#home'

  resources :microposts

  resources :users
  resources :sessions, :only => [:new, :create, :destroy]


  root :to => 'pages#home'

  match "/auth/twitter/callback" => "sessions#omnicreate"
  match "/auth/facebook/callback" => "sessions#omnicreate"


end

SessionsController

class SessionsController < ApplicationController

  def new
    @title = "Sign in"
  end

  def create
      user = User.authenticate(params[:session][:email],
                           params[:session][:password])
      if user.nil?
        flash.now[:error] = "Invalid email/password combination."
        @title = "Sign in"
        render 'new'
      else
        sign_in user
        redirect_back_or user
      end
  end

  def destroy
        sign_out
        redirect_to root_path
  end
end

Ответы [ 2 ]

2 голосов
/ 04 февраля 2012

Gem omniauth - отличный способ настроить аутентификацию с помощью сторонней службыУ них есть стратегия на Facebook.Я использовал его, и его было очень просто настроить.Просто вставьте свои ключи API в инициализатор рельсов.

1 голос
/ 05 февраля 2012

Похоже, вам нужно сделать пару вещей:

Изменить эти строки в файле маршрутов:

  root :to => 'pages#home'

  match "/auth/twitter/callback" => "sessions#omnicreate"
  match "/auth/facebook/callback" => "sessions#omnicreate"

На это:

  match "/auth/:provider/callback" => "sessions#omnicreate"

  root :to => 'pages#home' # this one should always be last

Оба Twitterи Facbook используют один и тот же метод, поэтому позже вам понадобится получить этот :provider параметр, чтобы выяснить, отправил ли его Twitter или Facebook.

Далее вам нужно создать метод в вашем SessionsController, который получает обратный вызов следующим образом:

def omnicreate

  data = request.env['omniauth.auth'] # here is all the user data
  if params[:provider] == 'twitter'
     #parse twitter data
  elsif params[:provider] == 'facebook'
     #parse fb data
  else
     # something is broken
     redirect_to '/404.html'
  end

  user = User.create! #use data you parsed to create a user
  redirect_to some_path, :notice => 'awwww yeah'
end

удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...