Разрешить пользователю доступ к защищенной странице с помощью URL-токена

Я использую Gem Clearance для аутентификации. У меня есть одна страница в приложении, на которую я хочу разрешить всем приходить, если у них есть безопасный токен в URL / сеансе. Они не должны быть пользователями в системе.

Это выполнимо с оформлением. Любые намеки на то, как мне поступить. Первоначально я думал, что я должен переопределить require_login а также current_user, Это хороший подход?

1 ответ

Решение

Должна ли страница защищенного токена также разрешать доступ людям, вошедшим в систему, или у всех должен быть безопасный токен?

Если у вас должен быть защищенный токен, независимо от того, вошли ли вы в систему с Clearance или нет, тогда я бы избегал Clearance для этого контроллера в целом, не вызывая require_login вообще (или звонит skip_before_action :require_login если фильтр уже находится в дереве наследования вашего контроллера). Тогда вы могли бы реализовать свой собственный before_action который проверяет токен и делает все, что вы хотите. Вы также можете реализовать свой собственный current_user для этого контроллера при желании.

Если на странице также разрешено входить в систему пользователям, я бы все равно пропустил оформление перед действием и вместо этого использовал бы что-то вроде этого:

def require_login_or_secret_token
  unless params["super_secret_security_token"] == TOKEN
    require_login
  else
end

Тогда вам нужно переопределить current_user, чтобы вернуть гостевой объект, а не ноль, если вы хотите использовать current_user в этом действии / представлении:

def current_user
  super || Guest.new
end
Другие вопросы по тегам