Как вызвать devise sign_in и sign_out методы devise из другого контроллера, отличного от devise? - PullRequest
14 голосов
/ 20 октября 2011

У меня есть приложение Ruby on Rails 3.0.7 и моя аутентификация пользователей с помощью devise, но у меня есть альтернативные методы sign up и sign in, и я разрешаю своим пользователям зарегистрироваться с использованием их учетной записи Facebook Я сохраняю эту регистрационную информацию в моей таблице users той же самой, которую devise использует для регистрации и входа в систему пользователей.

Steps

  1. ✔ Пользователь нажимает кнопку Facebook.
  2. save Я сохраняю его информацию (имя и адрес электронной почты извлечены из Koala). Я даю пользователю общий пароль.
  3. ☐ Войдите в систему этого нового пользователя с помощью devise.
  4. ✔ Перенаправить на мой главный контроллер.

Я просто пропускаю третий шаг, потому что хочу продолжать использовать помощник current_user и помощник user_signed_in?.

Итак, как мне сказать devise, чтобы автоматически входить в систему с другого моего контроллера?

Я видел что-то подобное в этом вопросе Придумайте: несколько контроллеров обрабатывают пользовательские сессии , и он регистрирует моего пользователя, но выводит меня на пустую страницу ...

Ответы [ 2 ]

22 голосов
/ 14 ноября 2011

Devise предлагает группу помощников , два из которых:

sign_in(resource_or_scope, *args)
sign_in_and_redirect(resource_or_scope, *args)

Вы можете использовать их с любого контроллера.

РЕДАКТИРОВАТЬ

Если использование sign_in уже работает для вас, но оставляет пользователя на пустой странице, проверьте свой журнал, чтобы увидеть, происходит ли перенаправлениеи куда он перенаправляет.Или просто сделайте перенаправление явным, используя второй из перечисленных выше помощников.

1 голос
/ 17 июля 2013

Включите помощников Devise в свой контроллер и все обычные методы разработки, например, 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

...