Как вызывать device sign_in и sign_out методы разработки с другого контроллера, отличного от разработки?
У меня есть приложение Ruby on Rails 3.0.7 и моя аутентификация пользователя с помощью devise
, но у меня есть альтернативные методы sign up
и sign in
, я разрешаю своим пользователям регистрироваться с помощью учетной записи Facebook
, тогда Я сохраняю эту информацию для входа в моей таблице users
той же самой, которая используется для регистрации и входа в систему.
Шаги
- ✔ Пользователь нажимает кнопку Facebook.
- ✔ Я сохраняю его информацию (имя и адрес электронной почты, извлеченные из
Koala
). Я предоставляю пользователю общий пароль.
- ☐ Войдите в новый пользователь с приложением.
- ✔ Перенаправление на главный контроллер.
Мне просто не хватает 3-го шага, потому что я хочу продолжать использовать помощник current_user
и помощник user_signed_in?
.
Итак, как я могу предложить разработчику автоматически входить в этот пользователь с моего другого контроллера?
Я видел что-то подобное по этому вопросу Devise: несколько контроллеров обрабатывают сеансы пользователя, и он регистрирует моего пользователя, но приводит меня к пустой странице...
Ответы
Ответ 1
Devise предлагает группу помощников, две из которых:
sign_in(resource_or_scope, *args)
sign_in_and_redirect(resource_or_scope, *args)
Вы можете использовать их с любого контроллера.
ИЗМЕНИТЬ
Если использование sign_in
уже работает для вас, но оставляет пользователя на пустой странице, проверьте свой файл журнала, чтобы узнать, происходит ли перенаправление и куда он перенаправляется. Или просто сделайте перенаправление явным, используя второй из помощников выше.
Ответ 2
Включите помощники разработки в свой контроллер и все обычные методы разработки, например. sign_in
или sign_out
будут автоматически доступны там.
class TestController < RocketPants::Base
include Devise::Controllers::Helpers
К счастью, если ваш контроллер расширяет ApplicationController
, Devise автоматически включает эти помощники в качестве удобных методов.
Но репо RockePants
объясняет конкретный случай, когда контроллер не расширяет ApplicationController
, и поэтому требуется явное выражение include Devise::Controllers::Helpers
https://github.com/filtersquad/rocket_pants/issues/7
Кроме того, официальные документы Devise полезны для поиска других методов, которые вы сможете использовать, включая помощников
http://rubydoc.info/github/plataformatec/devise/master/Devise/Controllers/Helpers