Есть ли способ рельсов, чтобы повторить POST после аутентификации пользователя? - PullRequest
2 голосов
/ 18 марта 2011

Мой пользовательский опыт подразумевает, что пользователи отправляют форму перед тем, как пройти аутентификацию (используя omniauth).Я начал делать что-то вроде этого:

    def self.require_facebook_authentication!(options={})
      before_filter :redirect_to_facebook_if_not_authenticated options
    end

    def redirect_to_facebook_if_not_authenticated
      if !logged_in?
        session[:param_cache] = params
        session[:original_destination] = request.fullpath
        redirect_to '/auth/facebook'  

      end
    end

Затем, при нажатии обратного вызова auth, перенаправьте на страницу, которая отправляет форму со встроенными параметрами post, всего 3 перенаправления (/stuff/new/ on POST -> auth/facebook -> facebook -> /auth/facebook/callback [ html template with POST form ] -> /stuff/create).Я бы не хотел создавать всплывающее окно аутентификации;вместо этого я хотел бы перейти на отдельную страницу, войти в систему и перенаправить на завершенное действие.

Я довольно новичок в Rails, поэтому я все еще учусь - это уже встроено вдругая структура?Я скучаю по чему-то действительно простому?Заранее спасибо!

Ответы [ 2 ]

4 голосов
/ 21 марта 2011

, если вы спрашиваете, существует ли способ «RAILS», который будет автоматически публиковать данные после перенаправления, ответ «нет» (см. /706558/redirectto-ispolzuya-post-v-relsah)

На мой взгляд, самый безопасный,Самый простой и самый RESTful способ добиться того, чего вы хотите, - это просто сохранить параметры, которые вы в конечном итоге публикуете в сеансе, чтобы вы могли перенаправить обратно на исходную «новую» страницу и автоматически заполнить форму данными публикации.это еще один дополнительный шаг для пользователя, но поскольку REST не допускает перенаправления на POST, это, по моему мнению, самый чистый способ сделать это

0 голосов
/ 18 марта 2011

Возможно, есть лучший способ, но если вы выполните рендеринг после аутентификации, клиент Ajax опубликует содержимое формы, а затем перенаправит.

<script>
  new Ajax.Request(<%= session[:original_destination] %>, {
    method: 'post',
    params: '<%= session[:param_cache].to_query %>',
    onSuccess: function(){
      window.location = '<%= session[:original_destination] %>';
    }
  });
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...