#ruby-on-rails #devise
#ruby-on-rails #разработка
Вопрос:
Мы хотели бы иметь 3 разные формы входа для нашего приложения:
-
форма входа по умолчанию выводит их на обычную панель управления (как мы делаем сейчас)
-
форма входа «foo», которая, если они используют ЭТУ форму для входа, выводит их на экран специального назначения
-
форма входа в систему «bar», которая выводит их на еще один специальный экран
Я предполагаю, что правильный подход заключается в том, чтобы как-то
a) создайте новый маршрут для / foo и /bar , вероятно, направляя оба к ОДНОМУ и тому ЖЕ методу входа, но в маршрут добавьте параметр url ‘signin_type’, сообщающий нам, какой это «тип» формы входа?
б) реализовать пользовательский метод (ы) RegistrationsController (какое имя?) для обработки формы входа (у нас уже есть пользовательский метод создания и создания при регистрации, поскольку в нашей регистрационной форме необходимо добавить поле «реферальный код»), и чтобы метод просматривал параметр url ‘signin_type’, чтобы перенаправить знак либо на обычный, либо на foo, либо на bad
c) реализовать другой метод, который обрабатывает отправку входа (это другой метод?) это рассматривает какое-то специальное значение встроенной формы, чтобы определить, какая форма подписи использовалась?
Это мое лучшее предположение. Если правильно, то это как сделать (b) и (c), которые ставят меня в тупик. Любые мысли будут оценены!
Ответ №1:
Я думаю, вы, возможно, пытаетесь перепроектировать это. Я бы подошел к этому с помощью одной страницы sign_in и просто использовал условную логику при переопределении after_sign_in_path_for(resource)
метода для контроллера Devise. Это не только будет намного проще реализовать сейчас, но и будет намного проще поддерживать в будущем. Просто добавьте в свой ApplicationController.rb
:
protected
def stored_location_for(resource)
nil
end
def after_sign_in_path_for(resource)
if condition_foo
redirect_to foo_url
elsif condition bar
redirect_to bar_url
else
redirect_to dashboard_url
end
end
Первый метод переопределяет местоположение Devise по умолчанию root
и устанавливает его равным нулю, тогда логика после этого довольно понятна. Это должно работать для того, что вы хотите.
Комментарии:
1. Спасибо, но если я правильно понял предложение, это не позволило бы мне иметь разные страницы входа (3 страницы входа должны выглядеть по-разному, потому что они входят в разные «части» приложения)
2. На самом деле у вас все еще может быть 3 разные страницы входа, если хотите. Просто следуйте этому руководству, чтобы добавить форму входа на любую страницу, которую вы хотите. Затем он будет следовать логике моего ответа, чтобы перенаправить в соответствующее место.