Я только начал работать над приложением Rails 4 (4.2.3), где я использую Devise
для аутентификации пользователей. Я хочу, чтобы пользователи могли играть с приложением до подписания upp, создав тестовый проект и войти в систему как гостевой пользователь. Когда пользователь подписывает (или входит), я хочу назначить тестовый проект новому текущему пользователю.Rails 4 - Devise, гостевые пользователи останавливают цепочку фильтров
Я следовал этому руководству от Platformatec: https://github.com/plataformatec/devise/wiki/How-To:-Create-a-guest-user
Создание работы пользователей гостя, но при регистрации или с активной сессии гостевой пользователя я получаю следующую ошибку:
Filter chain halted as :require_no_authentication rendered or redirected
Если Я очищаю сессию, это работает. Метод, который управляет моим гостевым пользователем, выглядит так:
def current_or_guest_user
if current_user
if session[:guest_user_id] && session[:guest_user_id] != current_user.id
logging_in
guest_user(with_retry = false).try(:destroy)
session[:guest_user_id] = nil
end
current_user
else
guest_user
end
end
Как уже упоминалось, создание гостевых пользователей, похоже, очень хорошо работает. Но эта логика никогда не бывает:
# should delete the guest user and clear the session.
if current_user
if session[:guest_user_id] && session[:guest_user_id] != current_user.id
logging_in
guest_user(with_retry = false).try(:destroy)
session[:guest_user_id] = nil
end
current_user
Я уверен, что мой гость сеанс пользователя конфликтует с моим новым пользователем, и вызывает эту ошибку DEViSE (так как гостевой пользователь никогда не будет удален на знак вверх):
Filter chain halted as :require_no_authentication rendered or redirected
Остальная часть моей гостевой логики выглядит примерно так же, как этот связанный гид: https://github.com/plataformatec/devise/wiki/How-To:-Create-a-guest-user. Я также добавил код из абзаца/примера аутентификации: https://github.com/plataformatec/devise/wiki/How-To:-Create-a-guest-user#authentication-this-may-interfere-with-the-current_user-helper.
Любые идеи о том, что мне не хватает, и как я могу получить свой current_or_guest_user
, чтобы удалить гостевого пользователя при регистрации и подписании при использовании Devise?
Update
Это как мои маршруты выглядят в данный момент:
devise_for :users, controllers: { sessions: "users/sessions", registrations: "users/registrations" }
root :to => 'public#index'
resources :apps
get 'users/show', to: "users#show"
get 'users', to: "users#index"
post 'guests/receive_guest', to: "guests#receive_guest"
Update 2
В руководстве имеют следующее заявление:
When (and if) the user registers or logs in, we delete the guest user and clear the session variable.
Это не объясняет, как и как это сделать. Я предполагаю, что я должен снова позвонить current_or_guest_user
. Но я не уверен, где, так как я не знаком с Devise.
Update 3
Чтобы сделать это немного более ясно. Это шаги, которые я хочу достичь.
- Пользователь создает тестовый проект.
- При создании тестового проекта создается гостевой пользователь и сеанс. Гость должен быть удален после завершения сеанса или №3.
- Если пользователь гостя зарегистрировался, он должен войти в систему, и тестовый проект должен быть назначен новому реальному пользователю.
- Гость должен быть удален.
можете ли вы разместить свой файл 'routes.rb', пожалуйста? –
@huzefabiyawarwala Я сделал это сейчас. – Anders
Я пробовал то же самое, что вы пытаетесь реализовать на моей машине, и он отлично работает, так что, возможно, вы что-то упустили в дополнительном коде, который вы написали, а не в разработке. Если это возможно, удалите вышеуказанный код и разместите точные контроллеры, которые у вас есть в настоящее время. Это было бы легче отладить. –