Подтвердить что ты не робот

Как вызывать 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: несколько контроллеров обрабатывают сеансы пользователя, и он регистрирует моего пользователя, но приводит меня к пустой странице...

4b9b3361

Ответ 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