Я использую Devise + ominauth2, чтобы пользователи могли входить через различные сервисы. Если они войдут в систему, они получат немного лучший опыт, но если нет, то жизнь все еще продолжается. Однако я не вижу способа с Devise иметь страницу, которая бы обеспечивала как аутентифицированный, так и неаутентифицированный доступ.
Например:
class SomeController < ApplicationController
before_action :authenticate_user!
def some_action
end
end
В приведенном выше контроллере some_action доступно только в том случае, если пользователь аутентифицируется. Но то, что я на самом деле хочу, это что-то вроде:
class SomeController < ApplicationController
def some_action
loadSessionFromCookieIfExists
end
end
Тогда я могу использовать user_signed_in? по моему мнению. Но это не работает, потому что authenticate_user! перенаправит их в другое место. Разве что есть метод authenticate_if_possible?
Итак, что у меня есть сейчас, и это действительно брутто:
class SomeController < ApplicationController
before_action :authenticate_user!
skip_before_action :authenticate_user!, :only=>[:no_auth]
def action
do_stuff
return
end
def no_auth
do_stuff
return
end
private
def do_stuff
render :template => "action"
end
end
Я должен добавить, что omniauth2 не поддерживает запоминание вне ворот, поэтому возможно, что все это будет работать нормально, и проблема в omniauth2.