Разрешить пользователю доступ к защищенной странице с помощью 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