У меня есть контроллер PostsController, который позволяет пользователю создавать сообщения перед входом в систему. Но чтобы сохранить его, пользователь должен войти в систему, используя Omniauth.before_filter с методом от другого контроллера
В PostsController, у меня есть:
class PostsController < ApplicationController
before_filter :authenticate_user_by_service, :only => :create
def create
...
end
private
def authenticate_user_by_service
redirect_to user_omniauth_authorize_path(:facebook)
end
Теперь у меня есть еще один контроллер для обработки обратного вызова от Facebook, которая называется ServicesController
class ServicesController < ApplicationController
def create
auth = request.env["omniauth.auth"]
... authentication logic here ...
sign_in(:user, service.user)
end
method_alias: :facebook, :create
Обычно для проверки подлинности, после знака, я перенаправит: назад.
Однако services#create
здесь используется как before_filter. В этом случае, что я должен сделать, чтобы вернуть его в мои сообщения # create?
Обновление: Я получил это предупреждение о том, цепь фильтра прерывается в тот момент, я имею в другой метод
Started POST "/posts" for 127.0.0.1 at 2013-02-26 23:47:41 -0500
Processing by PostsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"H0as8=", "post"=>{"post"=>"bla bla"}, "commit"=>"Create Post"}
Redirected to http://localhost:3000/users/auth/facebook
Filter chain halted as :authenticate_user_by_service rendered or redirected
Большое спасибо за очень подробный ответ. Не могли бы вы объяснить, что происходит в Posts # create, если пользователь не заходит? Должен ли я вызвать require_login в этом методе? – AdamNYC