Rails + Devise: перенаправить на определенный URL на общедоступной странице Facebook Войти - PullRequest
0 голосов
/ 17 октября 2011

У меня есть общедоступная страница

"http://www.example.com/gift/5"

На нем есть кнопка подключения Facebook.

Я хочу, чтобы пользователь нажал кнопку подключения Facebook и затем был перенаправлен на

"http://www.example.com/gift/5/coupon"

В настоящее время Devise / Omniauth, похоже, теряет сеанс, поскольку он аутентифицирует пользователя. Я пытался отправить запрос ajax, прежде чем я делаю FB.api

    FB.login(function(response) {
    if (response.session) {
       $.ajax({
            url : '/ajax/facebook/url',
            type : 'post',
            data :  {push_to: "/gift/5/coupon"},
            beforeSend: function(xhr) {
                xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'));
            }
        });
      window.location = "https://graph.facebook.com/oauth/authorize?client_id=..........";
    } else {

    }
  });

запрос Ajax достигает

class AjaxController < ApplicationController

  def ajax_facebook_url_redirect

     session[:"fb_redirect_to"] = params[:push_to]

  end

Но я не могу найти переменную ни в

application_controller.rb

def after_sign_in_path_for(resource)
    print session[:"fb_redirect_to"]
    (session[:"user.return_to"].nil?) ? "/" : session[:"user.return_to"].to_s
  end

Какой-нибудь совет по отправке пользователя на определенный URL с общедоступной страницы?

1 Ответ

0 голосов
/ 25 октября 2011

Недавно на веб-сайте Devise появился новый раздел, посвященный обзорам OmniAuth Overview: https://github.com/plataformatec/devise/wiki/OmniAuth%3A-Overview

Вот суть:

def authenticate_user!
  if !current_user
    # This should work, but session is lost. See https://github.com/plataformatec/devise/issues/1357
    # session[:return_to] = request.fullpath
    redirect_to user_omniauth_authorize_path(:google_apps, :origin => request.fullpath)
  end
end   

def after_sign_in_path_for(resource)
  # This should work, but session is lost. See https://github.com/plataformatec/devise/issues/1357
  # return_to = session[:return_to]
  # session[:return_to] = nil
  return_to = request.env['omniauth.origin']
  stored_location_for(resource) || return_to || root_path  
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...