Facebook и RoR: как перенаправить на авторизацию URL? - PullRequest
0 голосов
/ 29 мая 2011

Я пытаюсь перенаправить пользователя на URL, который запрашивает разрешение на доступ к информации пользователя.

У меня есть представление с формой, действие которой переходит к следующему:

class AuthController < ApplicationController

   def auth
     @oauth = Koala::Facebook::OAuth.new("*id*", "*secret*", 'http://localhost:3000/auth/auth2') 
     address = @oauth.url_for_oauth_code(:permissions => "publish_stream")
     puts "address  #{address}"
     redirect_to address
     return  
   end

   def auth2

   end

end

Вкл. stdout, адрес отображается как: Redirected to <a href="https://graph.facebook.com/oauth/authorize?client" rel="nofollow">https://graph.facebook.com/oauth/authorize?client</a>_id=*id*&redirect_uri=http://localhost:3000/auth/auth2&scope=publish_stream

Если я введу этот URL-адрес автономно в своем браузере (а не через свое приложение), я попаду на правильную страницу, где приложение запрашивает разрешения. Однако благодаря моему заявлению я попадаю на страницу с логотипом Facebook, а не на страницу, запрашивающую разрешения.

Я ожидал увидеть страницу разрешений, а затем, как только пользователь разрешил разрешение, запрос перенаправляется на мой redirect_uri.

Ответы [ 3 ]

0 голосов
/ 31 мая 2011

Я просто хотел опубликовать ответ на мой вопрос. Решение было на самом деле довольно простым. Вместо того чтобы делать перенаправление на URI авторизации в моем контроллере, мне нужно было сделать это, по моему мнению, следующим образом. Это позволило избежать промежуточной страницы входа в систему и, по-видимому, является тем, что делают все остальные, кто столкнулся с этой конкретной проблемой (где промежуточная страница facebook предоставляется вместо передачи пользователя непосредственно на страницу авторизации.)

<script language=JavaScript>
top.location.href="https://graph.facebook.com/oauth/authorize?client_id=client_id&redirect_uri=http://localhost:3000/xxx&scope=publish_stream";
</script>

Не могу сказать, что понимаю, почему это важно, и я не могу перенаправить в контроллер. Так что если кто-то, использующий RoR, может объяснить, почему, дайте мне знать.

0 голосов
/ 04 сентября 2011

Недавно я столкнулся с подобной проблемой.Чтобы вырвать ваше приложение из iframe и перенаправить на страницу авторизации с перенаправления на стороне сервера в rails, вы можете сделать это:

def facebook_authorization
  redirect_url =<<-EOS
    <script>
      top.location.href='https://graph.facebook.com/oauth/authorize?client_id=client_id&redirect_uri=http://localhost:3000/xxx&scope=publish_stream';
    </script>
   EOS       

   render :inline => redirect_url
end

Это почти так же, как описано в документации на Facebookиспользуя php.

Далее, если пользователь авторизует ваше приложение, вы получите токен oauth_access в параметре ответа signature_request.Я не использую Koala, поэтому не уверен, как они анализируют подписанный запрос.

В результате тестирования я обнаружил, что, пока пользователь авторизует ваше приложение, вы будете получать токен oauth_access из Facebook при каждом запросе.,Это позволяет легко определить, авторизовал ли пользователь приложение или нет, и вы избегаете отправлять пользователю страницу авторизации каждый раз, когда он / она посещает ваше приложение.

0 голосов
/ 30 мая 2011

Используете ли вы fbml для перенаправления или пытаетесь сделать это на стороне сервера?Если ваше приложение представляет собой страницу холста и вы перенаправляете серверную часть, вы перенаправляете только Facebook, а не пользователя.Вам нужно будет убедиться, что вы на самом деле говорите Facebook, чтобы сделать перенаправление.

Проверьте fb: redirect , если это так.

...