Rails / Devise: восстановить сессию, не пройдя полный процесс аутентификации? - PullRequest
0 голосов
/ 01 ноября 2018

Я использую 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.

...