2010-11-25 6 views
0

난 레일 3 및 oauth2를 사용하여 캔버스 페이 스북 애플 리케이션을 만들려고 해요. 여기 그것은 종류의 미세 다음 작품 단계 그래서 https://github.com/intridea/oauth2레일 3, oauth2 및 캔버스 페이 스북 응용 프로그램 - fb 캔버스에 머물러주십시오

내가 FB에서 응용 프로그램으로 이동, 그것은 OAuth2를 설정 한 방법을 유발하지만, 그것은, 그것은 외출 외부 캔버스의 권한을 부여하도록 사용자에게 요청 FB의. 그런 다음 사용자가 권한을 부여하면 응용 프로그램에 들어가야하는 곳으로 이동하지만 다시 FB 외부에있는 모든 항목으로 이동합니다.

FB 내부의 앱으로 이동하면 권한이 부여 된 후 캔버스에 앱이 표시됩니다.

누구나 익숙한가요?

건배.

답변

0

내가 아는 한, 앱에 권한을 부여하는 페이지는 앱 페이지 외부에 있어야합니다. 그리고 당신이 당신의 FB의 앱 페이지로 리디렉션보다 더 원하는 경우에, 당신은

redirect_uri로 방법은 특별히 여기에 사용되는

access_token = client.web_server.get_access_token(params[:code], :redirect_uri => redirect_uri) 

def redirect_uri 
    uri = URI.parse(request.url) 
    uri.path = '/fbcanvas' 
    uri.query = nil 
    uri.to_s 
end 
, 그래서 당신은 당신의 FB의 앱 페이지에서 리디렉션 할 때, 당신이 돌아갑니다 사용하고한다 사이트 자체에서 리디렉션되는 경우 사이트로 돌아갑니다.

+0

안녕하세요. 확인해 주셔서 감사합니다. 실제로 OAuth2 :: HTTPError (요청시 HTTP 400 수신)를 수신하게됩니다. – Pod

+0

제안하는/fvcanvas는 무엇입니까? 앱의 특별한 점은 무엇입니까? 나는 그런 길을 찾지 못했기 때문에. – Pod

+0

/fbcanvas는 캔버스 페이지의 루트 주소입니다. OAuth2 :: HTTPError 또는 OAuth2 :: AccessDenied는 권한이 없다는 것을 의미합니다. 사용자를 다시 작성하여 인증 페이지로 다시 연결합니다. 내 생각에, 더 가까운 FB 문서를 읽어야하고, oauth2 젬 소스를 볼 수도 있지만, 그것들은 다소 작지만, 문서 부족으로 무엇을해야하는지 알 수 있도록 도와줍니다. – sandrew

0

나는 실제로 보석을 바 꾸었습니다.

지금 사용하는 것은 devise_oauth2_canvas_facebook gem입니다. https://github.com/ninajansen/devise_oauth2_canvas_facebook

devise 및 fbgraph와 함께 작동하며 상자에서 거의 효과가있어 캔버스 fb 앱에 좋습니다.

그리고 모든 것이 fb 캔버스 안에 있습니다 .-)

감사합니다.

0

나는 동일한 문제와 answered my own question을 가지고있었습니다. OmniAuth Overview wiki 페이지에 따라 application_contoller에 아래 코드를 추가해야합니다. 하지만 request.full_path 대신 request.env [ "HTTP_REFERER"]을 사용해야합니다.

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.env["HTTP_REFERER"]) 
    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 
관련 문제