2011-10-17 3 views
0

공개 평가 페이지가 있습니다.레일스 + 개발자 : 공개 페이지에서 특정 URL로 리디렉션 페이스 북의 로그인

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

거기에 Facebook 연결 버튼이 있습니다.

사용자가 Facebook 연결 단추를 클릭 한 다음

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

으로 리디렉션하고 싶습니다. 현재 Devise/Omniauth는 사용자를 인증 할 때 세션을 잃어 버리는 것처럼 보입니다. 나는 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 { 

    } 
    }); 

요청을

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로 사용자를 보내는 것에 대한 조언이 있습니까?

답변

0

이 문제를 해결 최근 고안 웹 사이트의 OmniAuth 개요 문서에 추가 된 새로운 섹션이 있습니다 : 여기 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 
+1

은 현재에 다시 사용자를 보냅니다 그들이 있던 페이지. 나는 그것을 한 걸음 더 나아가려고 노력하고있다/"선물 /"/ "선물/쿠폰" – Daxon

관련 문제